首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击即可关闭PropertySheet选项卡

单击即可关闭PropertySheet选项卡
EN

Stack Overflow用户
提问于 2011-01-30 11:48:06
回答 1查看 670关注 0票数 0

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

例如,如果我添加了4个选项卡:

然后,如果我单击除活动选项卡之外的任何选项卡(在这种情况下什么都不会发生),它将变为:

如果我单击非活动选项卡,它就会消失,只剩下一个选项卡。

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

代码语言:javascript
复制
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;

代码语言:javascript
复制
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);

并添加四个页面,如下所示:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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。有人知道为什么会这样吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-01 08:59:34

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4841032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档