我正在使用IShellPropSheetExt::AddPages()
方法添加一个属性页。在Windows 7,Windows Server 12 R2中,正确显示添加的属性页。但是在Windows 10中,当我单击添加的属性选项卡时,它会消失。
这种情况正在发生,因为每次调用FilePropPageDlgProc()
时,uMsg
参数都不会匹配WM_INITDIALOG
。所以没有创建对话。在对FilePropPageDlgProc()
进行几次调用后,执行FilePropPageCallbackProc()
将返回false。
BOOL CALLBACK FilePropPageDlgProc ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch (uMsg)
{
case WM_INITDIALOG:
{
/*code to initialise dialogue box*/
/*This case is never executed in windows 10. In other win7, win12 it is executed properly*/
}
}
}
UINT CALLBACK FilePropPageCallbackProc(HWND hWnd, UINT uMsg, LPPROPSHEETPAGE ppsp)
{
switch(uMsg)
{
...
case PSPCB_RELEASE:
{
FilePropSheetExt *pExt = reinterpret_cast<FilePropSheetExt *>(ppsp->lParam);
if (pExt != NULL)
{
pExt->Release();
}
}
break;
}
return FALSE;
}
HRESULT AddPages(LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam)
{
PROPSHEETPAGE propsp = {0};
HPROPSHEETPAGE hproppage;
propsp.dwSize = sizeof(propsp);
propsp.dwFlags = PSP_USEREFPARENT | PSP_USETITLE | PSP_USECALLBACK;
propsp.hInstance = NULL;
propsp.pfnDlgProc = (DLGPROC)FilePropPageDlgProc;
propsp.pcRefParent = (UINT*)&g_cRefModule;
propsp.pfnCallback = FilePropPageCallbackProc;
propsp.lParam = (LPARAM)this;
hproppage = CreatePropertySheetPage(&propsp);
if (pfnAddPage(hproppage, lParam))
{
this->AddRef();
return S_OK;
}
else
DestroyPropertySheetPage(hproppage); }
}
我不理解重复调用FilePropPageDlgProc
的位置,从uMsg
参数值分配的位置,以及此值与WM_INITDIALOG
不匹配的原因。