我是要在住窗口中加入菜单来控制edit,编译后没有任何错误,也能运行。
但是客户区并没有光标输入点,就是说edit不起作用,客户区不能输入任何字符#include<windows.h>
#include "resource.h"
static TCHAR szAppName[]=TEXT("EDIT");
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowComd)
{
HACCEL hAccel;
HWND hwnd;
WNDCLASS wndclass;
MSG msg;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpszMenuName=szAppName;           //载入菜单
wndclass.lpszClassName=szAppName;
wndclass.lpfnWndProc=WndProc;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.cbWndExtra=0;
wndclass.cbClsExtra=0;
if(!RegisterClass(&wndclass) )
{
MessageBox(NULL,szAppName,TEXT("Oh,NO!"),MB_ICONERROR);
return 0;
}
hwnd=CreateWindow(szAppName,TEXT("edit"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,nShowComd);
UpdateWindow(hwnd);
hAccel=LoadAccelerators(hInstance,TEXT("IDR_ACCELERATOR1"));  //载入加速键
while(GetMessage(&msg,NULL,0,0) )
{
if(!TranslateAccelerator(hwnd,hAccel,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static HWND hwndEdit;
switch(message)
{
case WM_CREATE:              //创建edit子窗口
hwndEdit=CreateWindow(TEXT("edit"),NULL,
WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|
WS_BORDER|ES_LEFT|ES_MULTILINE|
ES_AUTOVSCROLL|ES_AUTOHSCROLL,
0,0,0,0,hwnd,(HMENU)1,
((LPCREATESTRUCT)lParam)->hInstance,NULL);
return 0;
case WM_SETFOCUS:
SetFocus(hwndEdit);
return 0;
case WM_SIZE:
MoveWindow(hwndEdit,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
return 0;
case WM_COMMAND:
if(lParam)
{
if(LOWORD(wParam)==1 &&HIWORD(wParam)==EN_ERRSPACE||
HIWORD(wParam)==EN_MAXTEXT)
MessageBox(hwnd,TEXT("OH!"),szAppName,MB_OK|MB_ICONSTOP);
return 0;

}
else switch(LOWORD(wParam))                 //处理菜单
{
case IDM_EDIT_CUT:
SendMessage(hwndEdit,WM_CUT,0,0);
return 0;
case IDM_EDIT_PASTE:
SendMessage(hwndEdit,WM_PASTE,0,0);
return 0;
case IDM_EDIT_SELECT_ALL:
SendMessage(hwndEdit,EM_SETSEL,0,-1);
return 0;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

解决方案 »

  1.   

    #include<windows.h>
    #include "resource.h"
    static TCHAR szAppName[]=TEXT("EDIT");
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowComd)
    {
    HACCEL hAccel;
    HWND hwnd;
    WNDCLASS wndclass;
    MSG msg;
    wndclass.style=CS_HREDRAW|CS_VREDRAW;
    wndclass.lpszMenuName=szAppName;           //载入菜单
    wndclass.lpszClassName=szAppName;
    wndclass.lpfnWndProc=WndProc;
    wndclass.hInstance=hInstance;
    wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.cbWndExtra=0;
    wndclass.cbClsExtra=0;
    if(!RegisterClass(&wndclass) )
    {
    MessageBox(NULL,szAppName,TEXT("Oh,NO!"),MB_ICONERROR);
    return 0;
    }
    hwnd=CreateWindow(szAppName,TEXT("edit"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,CW_USEDEFAULT,
    CW_USEDEFAULT,CW_USEDEFAULT,
    NULL,NULL,hInstance,NULL);
    ShowWindow(hwnd,nShowComd);
    UpdateWindow(hwnd);
    hAccel=LoadAccelerators(hInstance,TEXT("IDR_ACCELERATOR1"));  //载入加速键
    while(GetMessage(&msg,NULL,0,0) )
    {
    if(!TranslateAccelerator(hwnd,hAccel,&msg))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }
    return msg.wParam;
    }
    LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
    static HWND hwndEdit;
    switch(message)
    {
    case WM_CREATE:              //创建edit子窗口
    hwndEdit=CreateWindow(TEXT("edit"),NULL,
    WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|
    WS_BORDER|ES_LEFT|ES_MULTILINE|
    ES_AUTOVSCROLL|ES_AUTOHSCROLL,
    0,0,0,0,hwnd,(HMENU)1,
    ((LPCREATESTRUCT)lParam)->hInstance,NULL);
    return 0;
    case WM_SETFOCUS:
    SetFocus(hwndEdit);
    return 0;
    case WM_SIZE:
    MoveWindow(hwndEdit,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
    return 0;
    case WM_COMMAND:
    if(lParam)
    {
    if(LOWORD(wParam)==1 &&HIWORD(wParam)==EN_ERRSPACE||
    HIWORD(wParam)==EN_MAXTEXT)
    MessageBox(hwnd,TEXT("OH!"),szAppName,MB_OK|MB_ICONSTOP);
    //return 0;

    }
    else switch(LOWORD(wParam))                 //处理菜单
    {
    case IDM_EDIT_CUT:
    SendMessage(hwndEdit,WM_CUT,0,0);
    return 0;
    case IDM_EDIT_PASTE:
    SendMessage(hwndEdit,WM_PASTE,0,0);
    return 0;
    case IDM_EDIT_SELECT_ALL:
    SendMessage(hwndEdit,EM_SETSEL,0,-1);
    return 0;
    }
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
    }
    return DefWindowProc(hwnd,message,wParam,lParam);
    }
      

  2.   

    #include<windows.h>
    #include "resource.h"
    static TCHAR szAppName[]=TEXT("EDIT");
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowComd)
    {
    HACCEL hAccel;
    HWND hwnd;
    WNDCLASS wndclass;
    MSG msg;
    wndclass.style=CS_HREDRAW|CS_VREDRAW;
    wndclass.lpszMenuName=szAppName;           //载入菜单
    wndclass.lpszClassName=szAppName;
    wndclass.lpfnWndProc=WndProc;
    wndclass.hInstance=hInstance;
    wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.cbWndExtra=0;
    wndclass.cbClsExtra=0;
    if(!RegisterClass(&wndclass) )
    {
    MessageBox(NULL,szAppName,TEXT("Oh,NO!"),MB_ICONERROR);
    return 0;
    }
    hwnd=CreateWindow(szAppName,TEXT("edit"),
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,CW_USEDEFAULT,
    CW_USEDEFAULT,CW_USEDEFAULT,
    NULL,NULL,hInstance,NULL);
    ShowWindow(hwnd,nShowComd);
    UpdateWindow(hwnd);
    hAccel=LoadAccelerators(hInstance,TEXT("IDR_ACCELERATOR1"));  //载入加速键
    while(GetMessage(&msg,NULL,0,0) )
    {
    if(!TranslateAccelerator(hwnd,hAccel,&msg))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }
    return msg.wParam;
    }
    LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
    static HWND hwndEdit;
    switch(message)
    {
    case WM_CREATE:              //创建edit子窗口
    hwndEdit=CreateWindow(TEXT("edit"),NULL,
    WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|
    WS_BORDER|ES_LEFT|ES_MULTILINE|
    ES_AUTOVSCROLL|ES_AUTOHSCROLL,
    0,0,0,0,hwnd,(HMENU)1,
    ((LPCREATESTRUCT)lParam)->hInstance,NULL);
    return 0;
    case WM_SETFOCUS:
    SetFocus(hwndEdit);
    return 0;
    case WM_SIZE:
    MoveWindow(hwndEdit,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
    return 0;
    case WM_COMMAND:
    if(lParam)
    {
    if(LOWORD(wParam)==1 &&HIWORD(wParam)==EN_ERRSPACE||
    HIWORD(wParam)==EN_MAXTEXT)
    MessageBox(hwnd,TEXT("OH!"),szAppName,MB_OK|MB_ICONSTOP);
    //return 0;

    }
    /*else */switch(LOWORD(wParam))                 //处理菜单
    {
    case IDM_EDIT_CUT:
    SendMessage(hwndEdit,WM_CUT,0,0);
    return 0;
    case IDM_EDIT_PASTE:
    SendMessage(hwndEdit,WM_PASTE,0,0);
    return 0;
    case IDM_EDIT_SELECT_ALL:
    SendMessage(hwndEdit,EM_SETSEL,0,-1);
    return 0;
    }
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
    }
    return DefWindowProc(hwnd,message,wParam,lParam);
    }
      

  3.   

    楼上的还是没有用
    我把
    case WM_CREATE:              //创建edit子窗口
    hwndEdit=CreateWindow(TEXT("edit"),NULL,
    WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|
    WS_BORDER|ES_LEFT|ES_MULTILINE|
    ES_AUTOVSCROLL|ES_AUTOHSCROLL,
    0,0,0,0,hwnd,(HMENU)1,
    ((LPCREATESTRUCT)lParam)->hInstance,NULL);改成:
    HINSTANCE hInstance;
    //...
    case WM_CREATE:              //创建edit子窗口
    hwndEdit=CreateWindow(TEXT("edit"),NULL,
    WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|
    WS_BORDER|ES_LEFT|ES_MULTILINE|
    ES_AUTOVSCROLL|ES_AUTOHSCROLL,
    0,0,0,0,hwnd,(HMENU)1,
    hInstance,NULL);
    就能够通过了
      

  4.   

    那岂不是((LPCREATESTRUCT)lParam)->hInstance用的不对?