自己设计的子窗体,只是注册个回调(WndProc),并无明确的消息循环,所以无法使用 TranslateMessage(&msg)
自己想个法子:
在 WM_KEYDOWN 消息里用如下代码: MSG msg;
msg.hwnd = hWnd;
msg.message = uMsg;
msg.wParam = wParam;
msg.lParam = lParam;
msg.time = GetTickCount();
msg.pt.x = 0;
msg.pt.y = 0; int a = TranslateMessage(&msg);
结果当然是得不到 WM_CHAR 消息,得到就不会来问了 = =各位大牛谁有解决的方法?

解决方案 »

  1.   

    刚才自己想的,得到了WM_CHAR消息,但感觉怪怪的~~~高手快来帮忙啊 case WM_KEYDOWN:
    {
    if (0x8000 & GetKeyState(VK_CONTROL))
    {
    switch (wParam)
    {
    case 0x58: //X key
    {
    if (0 != _this->stOrgData.Selected.Length)
    {

    }
    else
    {

    } break;
    } case 0x43: //C key
    {
    if (0 != _this->stOrgData.Selected.Length)
    {

    } break;
    } case 0x56: //V key
    {
    break;
    } case 0x46: //F key
    {
    break;
    }
    }
    }
    else
    {
    if (!(0x8000 & GetKeyState(VK_MENU)))
    {
    MSG msg;
    msg.hwnd = hWnd;
    msg.message = uMsg;
    msg.wParam = wParam;
    msg.lParam = lParam;
    msg.time = GetTickCount();
    msg.pt.x = 0;
    msg.pt.y = 0; TranslateMessage(&msg); do
    {
    GetMessage(&msg, NULL, 0, 0);
    } while (WM_CHAR != msg.message); DispatchMessage(&msg);
    }
    } break;
    }
      

  2.   

    windows中没有消息循环是不行的,好多是windows系统调用的.
      

  3.   

    子窗口的消息没有明确的循环?
    这怎么可能,MSG里的hwnd干什么吃的
    要是只有一个窗口的话根本不用hwnd了,一个程序中父窗口和子窗口的消息都经过消息循环的
      

  4.   

    我的意思是没有                 .while   TRUE                          invoke    GetMessage,addr @stMsg,NULL,0,0                          .break    .if eax  == 0                          invoke    TranslateMessage,addr @stMsg                          invoke    DispatchMessage,addr @stMsg                 .endw这种东西,消息循环系统内部做了,子窗体应该都这样
      

  5.   

    hWnd = CreateWindowEx(WS_EX_ACCEPTFILES, szWndClassName, NULL, WS_CHILD | WS_VISIBLE | WS_TABSTOP, X, Y, nWidth, nHeight, hWndParent, NULL, hInstance, NULL);