gpt4 book ai didi

c++ - 单击时关闭 PropertySheet 选项卡

转载 作者:行者123 更新时间:2023-11-27 23:31:44 27 4
gpt4 key购买 nike

我正在使用 Windows API 制作一个 PropertySheet 控件,但出于某种原因,当我单击它们时选项卡会关闭。

例如,如果我添加 4 个标签:

然后,如果我单击除事件选项卡之外的任何选项卡(在这种情况下没有任何反应),它将变为:

如果我点击非事件标签,它就会消失,只留下一个标签。

我在内存中使用对话框模板创建选项卡,创建方式如下:

static const char initText[] = "Tab";

pagetemplate = (DLGTEMPLATE*)new char[sizeof(DLGTEMPLATE) + sizeof(initText) * 2];

pagetemplate->style = WS_POPUP | DS_3DLOOK | WS_BORDER | WS_SYSMENU | WS_CAPTION | DS_CENTER;
pagetemplate->cdit = 0; // 0 controls
pagetemplate->cx = PROP_SM_CXDLG;
pagetemplate->cy = PROP_SM_CYDLG;

LPWORD lpword = (LPWORD)(pagetemplate + 1);
*lpword++ = 0; // no menu
*lpword++ = 0; // predefined dialog box class (by default)

MultiByteToWideChar(CP_ACP, NULL, initText, -1, (LPWSTR)lpword, sizeof(initText) * 2);

然后像这样创建 PropertySheet:

PROPSHEETHEADER psh;

SecureZeroMemory(&psh, sizeof(PROPSHEETHEADER));

psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_MODELESS | PSH_PROPSHEETPAGE | PSH_USECALLBACK;
psh.pszCaption = "Window";
psh.nPages = 1;
psh.nStartPage = 0;

PROPSHEETPAGE pages[1];

SecureZeroMemory(pages, sizeof(PROPSHEETPAGE));

pages[0].dwSize = sizeof(PROPSHEETPAGE);
pages[0].dwFlags = PSP_DLGINDIRECT;
pages[0].pResource = CGTabWindow::pagetemplate;
pages[0].pfnDlgProc = DialogProc;
pages[0].lParam = (LPARAM)this;

psh.ppsp = (PROPSHEETPAGE*)&pages;

propsheet = PropertySheet(&psh);

然后像这样添加四个页面:

PROPSHEETPAGE page;

SecureZeroMemory(&page, sizeof(PROPSHEETPAGE));

page.dwSize = sizeof(PROPSHEETPAGE);
page.dwFlags = PSP_DLGINDIRECT;
page.pResource = CGTabWindow::pagetemplate;
page.pfnDlgProc = DialogProc;
page.lParam = (LPARAM)this;

HPROPSHEETPAGE hpage = CreatePropertySheetPage(&page);

SendMessage((HWND)propsheet, PSM_ADDPAGE, NULL, (LPARAM)hpage);

最后,这是我的 DialogProc:

BOOL CALLBACK  DialogProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
cout << "hey" << endl;

switch (iMsg)
{
case WM_INITDIALOG :
return TRUE ;


case WM_COMMAND:
switch (LOWORD (wParam))
{
case ID_EDIT :
return TRUE;
case ID_HELP :
return TRUE;
case IDOK :
EndDialog (hDlg, 0) ;
return TRUE ;
}

break ;
}
return FALSE;
}

但由于某种原因,“嘿”永远不会显示。此外,发送带有任何索引的 PSM_INDEXTOHWND 始终返回 NULL。有谁知道为什么会这样?

最佳答案

这是因为您必须在对话框模板中至少有 1 个控件。

关于c++ - 单击时关闭 PropertySheet 选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4841032/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com