Word子类化——窗口重绘问题
我找到Word.exe窗口类名为“_WwG”的子窗口,得到其句柄为hWndTarget,该窗口为Word的文档工作区域,并通过SetWindowLong(hWndTarget, GWL_WNDPROC, (LONG)SubWindowProc)进行子类化,然后捕获其WM_PAINT消息,进行重绘,可是没有效果:
LRESULT SubWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){ //lc(TEXT("Enter SubWindowProc()...")); //lh(TEXT("SubWindowProc hWnd: "), hWnd); extern LONG g_lpWndDefProc; PAINTSTRUCT ps; LRESULT lRes = 0; RECT rect = {0}; switch(uMsg) { case WM_PAINT: GetUpdateRect(hWnd, &rect, TRUE); //以下四句为调试信息 ln(L"left:", rect.left); ln(L"top:",rect.top); ln(L"right:",rect.right); ln(L"bottom:",rect.bottom); lRes = CallWindowProcW( (WNDPROC)g_lpWndDefProc, hWnd, uMsg, wParam, lParam); BeginPaint( hWnd, &ps); PrintWindowWaterMark(hWnd, &rect);/*这里画一个窗口水印,没有效果,但是我对其他类型的窗口进行子类化的时候,水印能画出来。而且我调试中发现,这个函数确实是执行了的,也确实“画”成功了,但是没有在界面上显示出来。*/ return EndPaint( hWnd, &ps); } return CallWindowProc( (WNDPROC)g_lpWndDefProc, hWnd, uMsg, wParam, lParam);}