原来在主窗口类的注册时加了回调函数
    WNDCLASS wc;    wc.style = CS_HREDRAW |
      CS_VREDRAW;                    /* redraw if size changes */
    wc.lpfnWndProc = MainWndProc;      /* points to window proc. */MainWndProc里可以响应鼠标的消息。
但是在主窗口上CreateWindowEx创建一个ListCtrl窗口后,程序对鼠标的消息不能响应
如何在ListCtrl中加入MainWndProc的响应方法

解决方案 »

  1.   

    我用
    LONG   SetWindowLong   (HWND   hWnd,   int   nIndex,   LONG   dwNewLong); 
    将我的ListCtrl重新指定消息处理函数,
    但是重新指定后,ListCtrl中的内容却刷没了 显示为空白, 头痛啊!!!!!
      

  2.   

    因为控件自身处理了鼠标消息,不会转发给父窗口。一个是在主消息循环GetMessage后判断目标窗口自己转发消息,一个是子类化控件处理鼠标消息。
    请大家支援灾区,积极捐款捐物。
      

  3.   

    同上,在消息循环中处理,或者重设ListCtrl的WindowProc。
      

  4.   

    在主消息循环GetMessage后判断目标窗口自己转发消息 很容易让CPU利用率过高,
    是这样么?
    while (GetMessage(&msg, (HWND) NULL, 0, 0)) {
            TranslateMessage(&msg);
       if (msg.message == (WM_LBUTTONDOWN | WM_RBUTTONDOWN 
           | WM_MOUSEMOVE |WM_LBUTTONUP | WM_RBUTTONUP)) {
            //  控件窗口              
    PostMessage(mListctrl, msg.message,        msg.wParam,           msg.lParam);
       }
       else if (msg.message == WM_PAINT) {
           //  主窗口
           PostMessage(mMainWnd, WM_PAINT, msg.wParam, msg.lParam);
       }
       else {
            DispatchMessage(&msg);
       }
      

  5.   

    我已经重设ListCtrl的WindowProc。
    SetWindowLong(mListctrl, GWL_WNDPROC, MainWndProc);
    但是重新指定后,ListCtrl中的内容却刷没了 显示为空白
      

  6.   

    重设WindowProc后,在自己的WindowProc中处理完后要调用原来的WindowProc。
      

  7.   

    你是说
    SetWindowLong(mListctrl, GWL_WNDPROC, CtrlWndProc); 后在CtrlWndProc 中 return MainWndProc( hwnd, message, wParam, lParam);?
    MainWndProc为主窗口的WindowProc
      

  8.   

    不是主窗口,是SetWindowLong的返回值。
      

  9.   

    在我的程序中
    MainWndProc为主窗口的WindowProc CtrlWndProc为控件窗口的WindowProc 我是这么重设ListCtrl的WindowProc。 
    SetWindowLong(mListctrl, GWL_WNDPROC, CtrlWndProc); 你说
    重设WindowProc后,在自己的WindowProc中处理完后要调用原来的WindowProc
    也就是说在控件的回调函数CtrlWndProc中处理完后调用主窗口的回调函数MainWndProc是我这么理解么?
      

  10.   

    定义一个全局变量WNDPROC OldCtrlWndProc;OldCtrlWndProc = (WNDPROC)(LONG_PTR)SetWindowLong(……
    在CtrlWndProc中执行完自己的处理代码后return OldCtrlWndProc(……