首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DrawText更新标签

使用DrawText更新标签
EN

Stack Overflow用户
提问于 2010-02-22 18:06:53
回答 3查看 1.6K关注 0票数 0

我目前正在用c++ (no MFC)编写一个程序,并希望使用win32 DrawText函数更新一个标签(win32静态控件)。但是,当我调用该函数时,没有向标签写入任何内容。我使用以下代码:

代码语言:javascript
复制
    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?

希望你们能帮助我。

EN

回答 3

Stack Overflow用户

发布于 2010-02-22 18:13:03

我猜文本已经绘制好了,但在下一个窗口中,消息被设置为默认文本。

尝试使用SendMessage(..,WM_SETTEXT,...)设置文本

票数 0
EN

Stack Overflow用户

发布于 2010-03-04 00:49:38

使用SetDlgItemText()设置控件的文本。

您正尝试直接在静态控件的设备上下文上进行绘制。这不会这么简单,因为:

当控件的更新区域为invalidated

  • usually时,控件将重新绘制自身。控件与父窗口共享设备上下文,所以您在GetDC(...)中得到的是
  • 。实际上是对话框的设备上下文。

因此,使用SetDlgItemText或SetWindowText来设置窗口的文本。

要使用自定义字体(或设置文本/背景颜色),请在WindowProc中处理WM_CTLCOLORSTATIC消息。

票数 0
EN

Stack Overflow用户

发布于 2010-09-09 21:14:37

如果您想手动绘制文本,因为设置控件文本不会执行您想要的操作,那么您需要告诉Windows您正在执行此操作。否则,无论您做什么,只要需要重新绘制,控件就会自动绘制。

若要自己绘制,请通过设置SS_OWNERDRAW样式将控件标记为owner draw,然后处理WM_DRAWITEM消息以在父窗口的窗口过程中绘制它,或者子类化该窗口并在新窗口过程中处理WM_PAINT消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2310101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档