大家可以在自己的WM_LBUTTONUP消息中加个MessageBox看看能不能在父窗口中处理单击事件。

解决方案 »

  1.   

    这个很正常,弹出了窗口后程序就暂停在那里了。你可以这么试一下,点鼠标左键松开的时候在屏幕上打印鼠标位置,看看是不是你鼠标点的时候的位置你就明白了,打印语句在messagebox后面。
      

  2.   

    不是这样的。弹出MessageBox后,窗体经过了重绘。建议设置个标志变量,然后在WM_PAINT里面显示。在BN_CLICKED里面SendMessage(hWnd,WM_PAINT,0,0);
      

  3.   

    调用MessageBox后,所有的窗口消息都跑MessageBox的处理循环去了,所以接下来的一系列消息,包括WM_LBUTTONUP都不能送到你的Button里去,也就无法触发Button的BN_CLICK事件
      

  4.   

    上面的代码用看的,不好意思全部太多,贴不了~不过关键就那一句。不知道怎么解决这个问题呢?------------------------
    我的想法和jasonshark(最后一个暑假了...) 和一样,我也这么觉得
      

  5.   

    应该是按钮弹起时弹出消息框,之后才调用系统默认过程向父窗口发送WM_COMMON消息
    但是有序这里延长了按钮按下和弹起的时间差,导致系统不认为这次是单击。
      

  6.   

    楼上正解
    BN_CLICKED事件貌似鼠标松开事件
    但是当你松开鼠标的时候,可能鼠标已经不在那个button上了而且你响应Command事件的时候根本不需要判断事件类型
    switch(wmEvent)
               {
               case BN_CLICKED:
             {
                                                    HDC hdc = ::GetDC(hWnd);                   
                                                    ::TextOut(hdc, 50, 50, _T("123123123"), 1); // 这里就根本没救来
            ::ReleaseDC(hWnd, hdc);         break;
             }
               }把上面改为
    HDC hdc = ::GetDC(hWnd);                   
    ::TextOut(hdc, 50, 50, _T("123123123"), 1); // 这里就根本没救来
    ::ReleaseDC(hWnd, hdc);
    break;
      

  7.   

    ralphvsclark(微笑)说的很对
    你不要messagebox就可以了,
      

  8.   

    TO: ggglivw() 一定要用messagebox呢! - -
      

  9.   

    case WM_LBUTTONUP:// 
    {
                            ::MessageBox(NULL, _T("Test"), _T("Test"), MB_OK); // 只要加了这种消息提示,按钮就不会向父窗口发送WM_COMMON消息(处理单击事件),不加这句就很正常
    break;
    }
    不会向父窗口发送WM_COMMON消息,这是太正常的了,不知给这样行不
    int iRes = ::MessageBox(NULL, _T(str), _T("Test"), MB_YESNO); 
    if(iRes == IDYES)
    { };//添加你的代码,向父窗口发送WM_COMMON消息
      

  10.   

    TO:yaazz((大山)我在成长)应该也不行的。这种情况很正常?
      

  11.   

    不是说了吗,你想应COMMAND事件的时候
    去掉外面的哪些判断
    switch(wmEvent)
               {
               case BN_CLICKED:
             {试一下
      

  12.   

    /**
     * Handle the WM_COMMAND messages.+++
     */
    LRESULT msgCommand(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam)
    {

    if(LOWORD(wparam) == IDC_BUTTON1)
    {
    ::MessageBox(ghwnd,"Test","Test",MB_OK);
    }
    else
    {

    for (int i = 0; i < sizeof(keycode)/sizeof(KEYCODE); i++)
    {
    UINT id = keycode[i].ID;
    BYTE vk = keycode[i].VK;
    if (LOWORD(wparam) == id)
    {
    switch (keycode[i].ID)
    {
    case IDC_KEY_numAdd:
    gbShift = !gbShift;
    if (gbShift)
    keybd_event(VK_SHIFT, 0, 0, 0);
    keybd_event(vk, 0, 0, 0);
    keybd_event(vk, 0, KEYEVENTF_KEYUP, 0); if (gbShift)
    {
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
    gbShift = false;
    InvalidateRect(GetDlgItem(hwnd, IDC_KEY_SHIFT), NULL, true);
    } // keybd_event(vk, 0, KEYEVENTF_KEYUP, 0);++++++++++++
    break;
    case IDC_KEY_numArray:
    gbShift = !gbShift;
    if (gbShift)
    keybd_event(VK_SHIFT, 0, 0, 0);
    keybd_event(vk, 0, 0, 0);
    keybd_event(vk, 0, KEYEVENTF_KEYUP, 0); if (gbShift)
    {
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
    gbShift = false;
    InvalidateRect(GetDlgItem(hwnd, IDC_KEY_SHIFT), NULL, true);
    } // keybd_event(vk, 0, KEYEVENTF_KEYUP, 0);++++++++++++
    break;
                           
    case IDC_KEY_SHIFT:
    gbShift = !gbShift;
    break; break;
    }
    }
    }
    }
    return 0;
    }