CWnd的GetDlgCtrlID()和GetDlgItem()应该可以完成相同的工作呀,可是……

sity 2000-12-28 06:34:00
我想改变静态文本的颜色,处理对话框的OnCtlColor时,如果写成:
if(pWnd->GetDlgCtrlID()==IDC_STATIC1)
{
COLORREF tCl=RGB(255,255,0);
pDC->SetBkColor(bkCl);
}
就正确。如果把第一句改成if(pWnd->GetDlgItem(IDC_STATIC1)),就不对,为什么?我看MSDN觉得二者的功能应该是一样的,是不是我理解有误?
...全文
1731 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pixie 2000-12-29
  • 打赏
  • 举报
回复
要看你的pWnd是什么。
GetDlgCtrlID是的到窗体(控件)自己的ID。
pWnd->GetDlgItem是按参数中的ID得到pWnd中以ID为标记的子窗体(控件)指针。(其中pWnd是一个对话框的指针)
例如:在pWnd所指的窗口中有ID是IDC_STATIC1的标签,则
pLabelWnd=pWnd->GetDlgItem(IDC_STATIC1)得到的是标签IDC_STATIC1的指针。
如果有一标签控件的指针pLabelWnd,则
pLabelWnd->GetDlgCtrlID()将返回此标签控件的ID。
当然pWnd->GetDlgCtrlID()也正确。但pWnd是窗口的话,返回值是无效的。

wuchuncai 2000-12-29
  • 打赏
  • 举报
回复
to sity
this->GetDlgItem(IDC_STATIC1)或 GetDlgItem(IDC_STATIC1) return TRUE;
wuchuncai 2000-12-29
  • 打赏
  • 举报
回复
pWnd->GetDlgCtrlID()==IDC_STATIC1
或GetDlgItem(IDC_STATIC1)==pWnd

Ideal 2000-12-29
  • 打赏
  • 举报
回复
关注
sity 2000-12-29
  • 打赏
  • 举报
回复
谢谢诸位,我还是有点糊涂,虽然GetDlgItem返回的是pointer,但“if(pWnd->GetDlgItem(IDC_STATIC1))”也应为TRUE啊,而且通过设置断点,程序也确实执行了其内部的设置颜色的语句,但就是显示不变,谁能解释一下。
Smalling_D 2000-12-28
  • 打赏
  • 举报
回复
使用GetDlgCtrlID
Return Value

The numeric identifier of the CWnd child window if the function is successful; otherwise 0.
////////////////////////////////////////////////////
使用GetDlgItem
Return Value

A pointer to the given control or child window. If no control with the integer ID given by the nID parameter exists, the value is NULL.


一个返回numeric identifier 另一个返回pointer!

adidasprince 2000-12-28
  • 打赏
  • 举报
回复
GetDlgItem return CWnd*
GetDlgCtrlID return a resouce id
xubin_sh 2000-12-28
  • 打赏
  • 举报
回复
pWnd == pWnd->GetParent()->GetDlgItem(pWnd->GetDlgCtrlID())
mousubin 2000-12-28
  • 打赏
  • 举报
回复
this->GetDlgItem(IDC_STATIC1);
breath 2000-12-28
  • 打赏
  • 举报
回复
GetDlgItem 获得它的子控件,你自己叫IDC_STATIC1,怎么获得孩子

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧