我需要重绘窗口的NC区域并在其中设置自定义文本。因此,我可以重画,但是我不知道在窗口标题中使用什么来设置自己的文本。我尝试使用DefWindowProc
函数,但是它突然绘制了默认的Windows标题栏,这是不必要的。使用SetWindowText
也是不合适的,因为它会再次导致WM_SETTEXT
消息。所以请帮助我,我只需要自定义窗口的标题,而无需任何图形默认标题栏。
LRESULT SkinWindow::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM
lParam)
{
...
case WM_SETTEXT:
OnSetText(hWnd, wParam, lParam);
break;
...
}
void SkinWindow::OnSetText(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
DefWindowProc(hWnd, WM_SETTEXT, wParam, lParam);
OnNcPaint(hWnd, wParam, lParam);
}
答案 0 :(得分:0)
您必须完全处理two gettext messages:
case WM_GETTEXT:
lstrcpyn((LPTSTR)lParam, "Booga!", (int)wParam);
return lstrlen((LPTSTR)lParam);
case WM_GETTEXTLENGTH:
return 7; // lstrlen("Booga!") + null
如果希望WM_SETTEXT
正常工作,则必须将文本存储在自己的缓冲区中,并在查询文本时使用该缓冲区。切勿将它们传递给DefWindowProc
,因为DefWindowProc
在HWND
内部存储/检索文本。
注意:如果外部应用程序使用GetWindowText
,则仍然会错误地读取它,因为跨进程发送时,它会从隐藏的内部存储器中读取。