【发布时间】:2011-04-15 07:00:32
【问题描述】:
我最近将一个 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 时遇到的众多问题之一。
【问题讨论】:
-
检查您的资源文件。如果它返回 NULL 则没有具有该 ID 的子 dlg 项...
-
我在上面的帖子中添加了我在资源文件中看到的内容。
-
如果你在 GetDlgItem 调用处设置断点并使用 Spy++ 搜索窗口,你找到了吗?我猜你不会。
-
我打开 Spy++ 并右键单击每个“窗口”并点击突出显示,但似乎没有任何“Microsoft Forms 2.0 标签”控件存在。
-
巧合的是,我打开了 Visual Studio 6.0 项目,并且能够在 spy++ 中找到窗体上所有“Microsoft Forms 2.0 标签”控件的窗口。
标签: c++ visual-studio-2010 mfc