GetDlgItem参数HWND hDlg怎么获得

guishao_gs 2011-01-04 02:44:20
HWND GetDlgItem( 
HWND hDlg, // handle of dialog box
int nIDDlgItem // identifier of control
);


平时用GetDlgItem都是一个参数的(int nIDDlgItem )就是控件的ID号 但是这个2个参数(HWND hDlg)怎么获得?

我是想用这个GetDlgItem 来获取控件的文本值
...全文
1567 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2011-01-04
  • 打赏
  • 举报
回复
::GetDlgItem(HWND_PAINT, IDXXX);
信阳毛尖 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 varding 的回复:]
GetDlgItem(int nIDDlgItem )这个是MFC自己实现的,其实最终都是调用::GetDlgItem(HWND hDlg,int nIDDlgItem )

这个hDlg就是你控件所在的窗口句柄,
比如:你的控件IDC_BOTTON1在CxxxDlg上,如果你在CxxxDlg内使用GetDlgItem是不需要hDlg这个参数。
如果你在CxxxDlg类的外面使用那么第一个……
[/Quote]

这个说法比较正确,在类内使用这个函数,直接GetDlgItem(int nIDDlgItem ),或者GetDlgItem(this->m_hWnd,int nIDDlgItem );类间的话,就需要GetDlgItem(CxxxDlg->m_hWnd,int nIDDlgItem ),或者你直接用FindWindowEX函数得到对话框的句柄,然后直接传入GetDlgItem即可
Sou2012 2011-01-04
  • 打赏
  • 举报
回复
成员变量咯 m_hDlg
lslsyqyq 2011-01-04
  • 打赏
  • 举报
回复
1个参数的是mfc的
2个是sdk的
怎么获取 窗口句柄 要看你程序是怎么写的了
如果是c语言纯sdk 那么在createwindow或createdialog时候有hwnd返回 用这个就可以
如果是mfc那完全可以用1个参数的
nwao7890 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jyh_baoding 的回复:]

this->m_hWnd
[/Quote]
++学习
jyh_baoding 2011-01-04
  • 打赏
  • 举报
回复
this->m_hWnd
varding 2011-01-04
  • 打赏
  • 举报
回复
GetDlgItem(int nIDDlgItem )这个是MFC自己实现的,其实最终都是调用::GetDlgItem(HWND hDlg,int nIDDlgItem )

这个hDlg就是你控件所在的窗口句柄,
比如:你的控件IDC_BOTTON1在CxxxDlg上,如果你在CxxxDlg内使用GetDlgItem是不需要hDlg这个参数。
如果你在CxxxDlg类的外面使用那么第一个参数hDlg就是CxxxDlg窗口的句柄(m_hWnd)

class CxxxDlg
{
....
GetDlgItem(IDC_BOTTON1)
}

class A
{
GetDlgItem(hDlg,IDC_BOTTON1)//这个hDlg是CxxxDlg的m_hWnd成员变量
}
zwfgdlc 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 guishao_gs 的回复:]
C/C++ code

HWND hwnd=::FindWindow(NULL,"记事本");
CComboBox* cb=(CComboBox*)::GetDlgItem(hwnd,IDC_mComboBox);
CString str;
cb->GetWindowText(str);
[/Quote]
改这样.

HWND hwnd=::FindWindow(NULL,TEXT("记事本"));
TCHAR str[128] = {0};
::SendDlgItemMessage(hwnd, IDC_mComboBox, WM_GETTEXT, (WPARAM)_countof(str), (LPARAM)str);
guishao_gs 2011-01-04
  • 打赏
  • 举报
回复
好像combobox控件不能这样,,要GetCurSel,,然后GetLBText,?
guishao_gs 2011-01-04
  • 打赏
  • 举报
回复

HWND hwnd=::FindWindow(NULL,"记事本");
CComboBox* cb=(CComboBox*)::GetDlgItem(hwnd,IDC_mComboBox);
CString str;
cb->GetWindowText(str);
guishao_gs 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 zwfgdlc 的回复:]
引用 22 楼 guishao_gs 的回复:
引用 20 楼 zwfgdlc 的回复:
你最好把你想要实现的目的说出来,说不定其他人有更好的实现方法.
你自己想到的方法也不一定是最好的.
我就是想在自己建的头文件里写一些功能 这个功能那要用到这个控件选的值 是下拉菜单

1.用FindWindow()找到你要注入的进程.
2.用GetWindowThreadProcessId()找……
[/Quote]前3步都已经完成 就是最后一步
zwfgdlc 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 guishao_gs 的回复:]
我自己有一个办法就是在下拉菜单的cbn_selchange事件里把选择的值保持到一个ini文件里 然后用到的时候在把它取出来 但是这样会不会浪费资源 感觉这样绕的弯子有点大
[/Quote]
如果是这样,你可以把上面的第4步用SetWindowLongPtr()子类化
FindWindow()找到的窗口.然后在消息处理过程中处理LBN_SELCHANGE消息.
zwfgdlc 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 guishao_gs 的回复:]
引用 20 楼 zwfgdlc 的回复:
你最好把你想要实现的目的说出来,说不定其他人有更好的实现方法.
你自己想到的方法也不一定是最好的.
我就是想在自己建的头文件里写一些功能 这个功能那要用到这个控件选的值 是下拉菜单
[/Quote]
1.用FindWindow()找到你要注入的进程.
2.用GetWindowThreadProcessId()找到窗口所在的进程.
3.用SetWindowsHookEx()把你的DLL注入到进程.
3.利用之前FindWindow()得到的窗口句柄,用GetDlgItem()函数得到控件的句柄.
剩下的就是做你的事了.
guishao_gs 2011-01-04
  • 打赏
  • 举报
回复
我自己有一个办法就是在下拉菜单的cbn_selchange事件里把选择的值保持到一个ini文件里 然后用到的时候在把它取出来 但是这样会不会浪费资源 感觉这样绕的弯子有点大
guishao_gs 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 zwfgdlc 的回复:]
你最好把你想要实现的目的说出来,说不定其他人有更好的实现方法.
你自己想到的方法也不一定是最好的.
[/Quote]我就是想在自己建的头文件里写一些功能 这个功能那要用到这个控件选的值 是下拉菜单
信阳毛尖 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 zwfgdlc 的回复:]
你最好把你想要实现的目的说出来,说不定其他人有更好的实现方法.
你自己想到的方法也不一定是最好的.
[/Quote]

+1
zwfgdlc 2011-01-04
  • 打赏
  • 举报
回复
你最好把你想要实现的目的说出来,说不定其他人有更好的实现方法.
你自己想到的方法也不一定是最好的.
guishao_gs 2011-01-04
  • 打赏
  • 举报
回复
搞了2天 还是不行 只能先放弃这种办法了
zwfgdlc 2011-01-04
  • 打赏
  • 举报
回复
就是控件所在的对话框句柄.
guishao_gs 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zwfgdlc 的回复:]
引用 14 楼 guishao_gs 的回复:
引用 12 楼 zwfgdlc 的回复:
C/C++ code
GetDlgItem(AfxGetMainWnd()->m_hWnd, 控件ID)
我是在另外一个不相干的.H文件里写的 用AfxGeetMainWnd()->m_hWnd能获得吗?

一样 只要调用 注入dll的程序就消失了

那你首先得找到你要注入进程的窗口句柄.
……
[/Quote]
注入以后 是活的被注入的HWND? 而不是控件的DLG的HWND?
加载更多回复(9)

16,472

社区成员

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

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

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