//////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?
先谢谢了
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?
先谢谢了
#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);
现在窗口出现了,但是
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并不能显示在对话框中。请问是什么原因?