我在EXE中调用DLL中创建的窗体,但是由于特殊原因,不能直接在DLL中处理WM_PAINT消息,需要在EXE中进行编写窗体的绘制功能。这样的情况该如何编写呢?请各位帮个忙!

解决方案 »

  1.   

    设置一个回调函数,窗体收到WM_PAINT时调用这个函数,并把DC传出来
      

  2.   

    先截获你要处理的窗口的消息,然后处理该窗口的WM_PAINT消息,处理完,再把消息返还。
    LONG oldproc=GetWindowLong(hwnd,GWL_WNDPROC); //<保存老的窗口处理函数
    SetWindowLong(hwnd,GWL_WNDPROC,(LONG)MyProc); //<指定新的窗口处理函数LRESULT MyProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
      switch (uMsg) 
      { 
        case WM_PAINT:
    ///处理
    break;
      }
      return CallWindowProc((WNDPROC)oldproc,hwnd,uMsg,wParam,lParam);
    }
    记得在该exe析构的时候把oldproc再Set回去
    SetWindowLong(hwnd,GWL_WNDPROC,oldproc);