DrawStatusText 不会在第一次调用时绘制文本,仅在后续调用时绘制
DrawStatusText does not draw text on first call, only on subsequent calls
我有一个程序在 WM_PAINT
消息期间使用了 DrawStatusTextW()
函数。调用时,不绘制任何文本。但是,在随后的调用中,例如将 window 移动到任务栏下方然后将其拉回,文本将被绘制。
我尝试在函数中使用不同的标志,还尝试将其放在 WM_CREATE
消息中。没有效果。
RECT status_rect;
HDC status_dc;
SNDMSG(controls.status_bar, SB_GETRECT, 0, reinterpret_cast<LPARAM>(&status_rect));
status_dc = GetDC(controls.status_bar);
SelectObject(status_dc, status_font);
DrawStatusText(status_dc, &status_rect, L"Ready.", SBT_NOBORDERS);
ReleaseDC(controls.status_bar, status_dc);
它应该在第一次调用时绘制状态文本。我不应该在 window 周围移动,以便它重新绘制自己。
每个HWND
处理自己的绘画。如果您在绘制父项时在状态栏上绘制 window,状态栏自身的绘制处理将清除您绘制的内容。
如果您想自定义绘制状态栏,make the status bar be owner drawn and handle the WM_DRAWITEM
其父级 window 中的消息。
我有一个程序在 WM_PAINT
消息期间使用了 DrawStatusTextW()
函数。调用时,不绘制任何文本。但是,在随后的调用中,例如将 window 移动到任务栏下方然后将其拉回,文本将被绘制。
我尝试在函数中使用不同的标志,还尝试将其放在 WM_CREATE
消息中。没有效果。
RECT status_rect;
HDC status_dc;
SNDMSG(controls.status_bar, SB_GETRECT, 0, reinterpret_cast<LPARAM>(&status_rect));
status_dc = GetDC(controls.status_bar);
SelectObject(status_dc, status_font);
DrawStatusText(status_dc, &status_rect, L"Ready.", SBT_NOBORDERS);
ReleaseDC(controls.status_bar, status_dc);
它应该在第一次调用时绘制状态文本。我不应该在 window 周围移动,以便它重新绘制自己。
每个HWND
处理自己的绘画。如果您在绘制父项时在状态栏上绘制 window,状态栏自身的绘制处理将清除您绘制的内容。
如果您想自定义绘制状态栏,make the status bar be owner drawn and handle the WM_DRAWITEM
其父级 window 中的消息。