//////h
class MainDlg
{
public:
MainDlg();
~MainDlg();
bool CreateMainDialog(const HINSTANCE hInst, const HWND hWnd);private:
void InitMainDlg();
static LRESULT CALLBACK MainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
HWND m_hWnd;
HINSTANCE m_hInst;
};//////cpp
#include"stdafx.h"
#include"MainDlg.h"MainDlg::MainDlg()
{}MainDlg::~MainDlg()
{}bool MainDlg::CreateMainDialog(const HINSTANCE hInst, const HWND hWnd)
{
m_hInst = hInst;
m_hWnd = hWnd; INT_PTR iRet;
iRet = DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_MAIN),hWnd,(DLGPROC)MainProc,(LPARAM)this);//modal dialog 传递THIS 指针,dialog ID:IDD_MAIN if(iRet == 0 || iRet == -1)
return false;
else
return true;
}void MainDlg::InitMainDlg()
{
    .....
}LRESULT CALLBACK MainDlg::MainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 

static MainDlg *dlgPtr;
switch (uMsg) 
    {
case WM_INITDIALOG:
{
dlgPtr = (MainDlg*)lParam;
dlgPtr->InitMainDlg();
}
break;
  case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
EndDialog(hWnd, wParam); 
break;
}
break;
case WM_CLOSE:
{
EndDialog(hWnd, wParam);
return FALSE;  
}
break;
}    return FALSE;
} int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
HWND hDeskTopWnd = GetDesktopWindow();         //CREATE DIALOG
MainDlg mainDlg;
mainDlg.CreateMainDialog(hInstance, hDeskTopWnd); return 0;
}
请问,我想封装dialog的生成,这样在WINMAIN中就可以很方便的调用多个DIALOG,但是上面的代码为什么不能生成dialog?
先谢谢了

解决方案 »

  1.   

    现成的MFC不用,为什么要这么做呢?
      

  2.   

    这样思路清晰些,刚发现这样可以实现。但是如果在DIALOG资源中加入TABCONTROL就不能显示了,不知道为什么
      

  3.   

    有可能是因为你使用了Windows公用控件了。在SDK编程中,默认好像是不支持的,不像MFC,你可以在你的程序里添加如的代码再看看:#pragma comment(lib, "comctl32.lib")
    #pragma comment(linker, "/manifestdependency:\"type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'\"")//主函数中添加如下:
    INITCOMMONCONTROLSEX InitCtrls;
    InitCtrls.dwSize = sizeof(InitCtrls);
    // 将它设置为包括所有要在应用程序中使用的
    // 公共控件类。
    InitCtrls.dwICC = ICC_BAR_CLASSES;
    InitCommonControlsEx(&InitCtrls);
      

  4.   

    谢谢hbxtlhx
    现在窗口出现了,但是
    m_hTab = ::GetDlgItem(m_hWnd,IDC_TAB); char szTabText[2][32] = {"Test1", "Test2"};
    for( int i = 0; i < 2; i++)
    {
    TCITEM item;
    item.mask = TCIF_TEXT;
    item.cchTextMax = strlen(szTabText[i]);
    item.pszText = szTabText[i]; TabCtrl_InsertItem(m_hTab,i,&item);
    }
    tabcontrol并不能显示在对话框中。请问是什么原因?
      

  5.   

    谢谢hbxtlhx 是我的tab属性设置为初始不显示了