FilePropPageDlgProc永远不会在Windows 10中执行“case WM_INITDIALOG:”

时间:2017-09-29 02:25:48

标签: c++ windows callback windows-shell

我正在使用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不匹配的原因。

0 个答案:

没有答案