如何得到一个对话框上所有控件的ID?

Zhang_ZP 2008-06-26 04:00:36
我的方法是
CWnd* cWnd = GetWindow(GW_CHILD);
while(cWnd)
{
int nID = cWnd->GetDlgCtrlID();
cWnd = GetWindow(GW_HWNDNEXT);
}
可这样会得到ID为0的子窗口。
...全文
237 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Amuro1987218 2008-06-27
  • 打赏
  • 举报
回复
汗!
Zhang_ZP 2008-06-27
  • 打赏
  • 举报
回复
没什么问题。我等会就结贴了,不过难得发个帖。自己顶下。
Amuro1987218 2008-06-27
  • 打赏
  • 举报
回复
11的方法还有什么问题?
Zhang_ZP 2008-06-27
  • 打赏
  • 举报
回复
防沉顶帖。顶,顶,顶,顶,顶。
Amuro1987218 2008-06-26
  • 打赏
  • 举报
回复
除了人眼看,控件和普通子窗口有什么区别?

或者LZ或者GetClassName然后处理一下
Zhang_ZP 2008-06-26
  • 打赏
  • 举报
回复
想了想,这和我用的方法不是换汤不换药么?
Zhang_ZP 2008-06-26
  • 打赏
  • 举报
回复
但不是所有的子窗口都是控件吧?
Zhang_ZP 2008-06-26
  • 打赏
  • 举报
回复
说的对啊。这事我早就干过。现在居然没想到。试试。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Amuro1987218 的回复:]
BOOL EnumChildWindows( HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);

镁举子窗口.
[/Quote]
Amuro1987218 2008-06-26
  • 打赏
  • 举报
回复
但注意你可以把this指针通过lParam传过去
Zhang_ZP 2008-06-26
  • 打赏
  • 举报
回复
一楼的方法必须将lpEnumFunc写为静态和全局的函数。而这种函数里不能对类的数据进行操作。
vagrantisme 2008-06-26
  • 打赏
  • 举报
回复
static UINT nCtrlIds[] = {
IDC_EDT_WORKERS,
IDC_EDT_UDPIP,
IDC_EDT_UDPPORT,
IDC_EDT_PORT_LISTEN,
IDC_EDT_PORT_CTRL,
IDC_RDI_NULL,
IDC_RDI_CRYPTO,
IDC_RDI_PALM,
IDC_EDT_KEEPALIVETIME,
IDC_EDT_KEEPALIVEINTERVAL,
IDC_CHK_DEBUG_INFO
};
CWnd *pWnd = 0;
for( int i=0; i<sizeof(nCtrlIds)/sizeof(nCtrlIds[0]); ++i ){
pWnd = GetDlgItem(nCtrlIds[i]);
if( pWnd ) pWnd->EnableWindow(bEnable);
}


这样是在事先知道,ID的情况下,用如下方法。
如果不知道ID的话,只能用二楼的方法了。
Zhang_ZP 2008-06-26
  • 打赏
  • 举报
回复
沉了么?wo ding!顶上去。
天鹅梦 2008-06-26
  • 打赏
  • 举报
回复
int nID = cWnd->GetDlgCtrlID(); 就没什么用啊
最笨的办法是直接用GetDlgItem(nID)一个一个去获得,nID就是你的资源号
Amuro1987218 2008-06-26
  • 打赏
  • 举报
回复
BOOL EnumChildWindows( HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);

镁举子窗口.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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