【发布时间】:2019-07-01 03:55:49
【问题描述】:
我正在使用 PropertySheet(Wizard97 类型)创建一个 Windows 应用程序,但我不清楚如何从对话框回调中访问控件。
首先我设置属性表。
psp[1].dwSize = sizeof(PROPSHEETPAGE);
psp[1].dwFlags = PSP_HIDEHEADER ;
psp[1].hInstance = g_hInst;
psp[1].pszTemplate = MAKEINTRESOURCE(IDD_SETUP);
psp[1].pszIcon = NULL;
psp[1].pfnDlgProc = (DLGPROC)ButtonsDlgProc;
psp[1].lParam = 0;
所以在 ButtonsDlgProc 中,我无法访问已添加到对话框中的控件。
LRESULT CALLBACK ButtonsDlgProc(HWND hdlg,
UINT uMessage,
WPARAM wParam,
LPARAM lParam)
{
CButton * button;
switch (uMessage)
{
case WM_COMMAND:
switch (wParam)
{
case IDC_CHECK1:
button = (CButton *)GetDlgItem(hdlg, IDC_CHECK1);
button1IsChecked = button->GetCheck();
break;
GetDlgItem 返回一个句柄,但是在调用 button->GetCheck() 时,我得到一个异常。这是访问控制成员的正确方法吗?
【问题讨论】:
-
GetDlgItem(hdlg, IDC_CHECK1)返回HWND,您不能将其转换为CButton*,它们是两个不相关的对象。如果这是 MFC 的CWnd::GetDlgItem(IDC_CHECK1),那么您可以将CWnd*转换为CButton*。或者您可以使用CWnd::Attach(HWND)将句柄附加到CButton*- 无论如何,我对您为什么要像这样将MFC 与WinAPI 混合使用感到困惑。请详细说明。否则使用CPropertySheet等。 -
好点。我对 MFC 比较陌生,所以我没有意识到我正在混合 MFC 和 WinAPI。我将重构以使用 CPropertySheet。谢谢。
标签: c++ visual-c++ mfc propertysheet