我最近将visual studio 6.0项目转换为visual studio 2010,每当在某些项目上调用GetDlgItem时,我遇到了一个问题。以下代码失败。
CWnd *pWnd = (CWnd*) GetDlgItem(IDC_BATCH);
pWnd->GetWindowText(szBatchNum);
我在资源文件中看到这个代码,用于调用上面代码的表单。
IDD_CC_PROCESS DIALOGEX 0, 0, 657, 410
STYLE DS_SETFONT | WS_CHILD
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
CONTROL "",IDC_BATCH,"{978C9E23-D4B0-11CE-BF2D-00AA003F40D0}",0x0,85,18,89,16
END
调用GetDlgItem()后,pWnd为NULL。这不是6.0版本项目中的问题。 IDC_BATCH似乎是此表单上的有效资源。 IDC_BATCH指向“Microsoft Forms 2.0标签”。这似乎是我在将项目从6.0转换到2010年时遇到的众多问题之一。
答案 0 :(得分:1)
我对此问题没有任何特别的了解,但我会检查是否已针对VS2010附带的MFC版本更新了GUID /控件。如果MFC版本无法通过GUID识别控件类型,则可能无法为其正确创建CWnd包装器对象。您可能需要更新VS2010的GUID,和/或尝试使用本机Win32调用来访问它,而不是MFC包装器调用。
希望有所帮助。
答案 1 :(得分:0)
尝试枚举来自GetDlgItem
来电的CWnd的子项,并查看句柄是否还有子项。此外,您应该检查GetLastError
返回的值,这应该指示它是否是实际错误,该错误是什么,或者控件是否真的没有子节点(然后可能是res文件中的错误)或如果父控件存在