我目前正在用c++ (no MFC)编写一个程序,并希望使用win32 DrawText函数更新一个标签(win32静态控件)。但是,当我调用该函数时,没有向标签写入任何内容。我使用以下代码:
HDC devCon = ::GetDC(GetDlgItem(IDC_TITLE).m_hWnd);
RECT rect = {10, 10, 100, 15};
::DrawText(devCon, _T("TEST DC TEXT!!!"), -1, &rect, DT_NOCLIP);
::ReleaseDC(GetDlgItem(IDC_TITLE).m_hWnd, devCon);正如您在GetDlgItem(...)中看到的那样我正在使用ATL,但在我看来这不是问题。当我在GetDC方法中指定NULL时,文本将绘制在屏幕的左上角,因为该方法将DC返回到整个屏幕。为什么这不适用于标签的DC?
希望你们能帮助我。
发布于 2010-02-22 18:13:03
我猜文本已经绘制好了,但在下一个窗口中,消息被设置为默认文本。
尝试使用SendMessage(..,WM_SETTEXT,...)设置文本
发布于 2010-03-04 00:49:38
使用SetDlgItemText()设置控件的文本。
您正尝试直接在静态控件的设备上下文上进行绘制。这不会这么简单,因为:
当控件的更新区域为invalidated
因此,使用SetDlgItemText或SetWindowText来设置窗口的文本。
要使用自定义字体(或设置文本/背景颜色),请在WindowProc中处理WM_CTLCOLORSTATIC消息。
发布于 2010-09-09 21:14:37
如果您想手动绘制文本,因为设置控件文本不会执行您想要的操作,那么您需要告诉Windows您正在执行此操作。否则,无论您做什么,只要需要重新绘制,控件就会自动绘制。
若要自己绘制,请通过设置SS_OWNERDRAW样式将控件标记为owner draw,然后处理WM_DRAWITEM消息以在父窗口的窗口过程中绘制它,或者子类化该窗口并在新窗口过程中处理WM_PAINT消息。
https://stackoverflow.com/questions/2310101
复制相似问题