#pragma pack(push, 1)
typedef struct {
WORD dlgVer;
WORD signature;
DWORD helpID;
DWORD exStyle;
DWORD style;
WORD cDlgItems;
short x;
short y;
short cx;
short cy;
#if 0
WORD menu; // if this word=0 no menu elseif this=0xFFFF follows another word stand for ID
WORD windowClass;// elseif not 0 | not -1 then follows the name
WCHAR title[1]; // title string of the dialog box
short pointsize; // only if DS_SETFONT flag is set
short weight; // only if DS_SETFONT flag is set
short bItalic; // only if DS_SETFONT flag is set
WCHAR font[]; // typeface name, if DS_SETFONT is set
#endif
} DLGTEMPLATEEX, *LPDLGTEMPLATEEX;
//
typedef struct {
DWORD helpID;
DWORD exStyle;
DWORD style;
short x;
short y;
short cx;
short cy;
DWORD id;//not WORD !
#if 0
WORD windowClass; // name or ordinal of a window class
WORD title; // title string or ordinal of a resource
WORD extraCount; // bytes? of following creation data
#endif
}DLGITEMTEMPLATEEX, *LPDLGITEMTEMPLATEEX;
#pragma pack()
//Make point DWORD alignment
LPDWORD lpdwAlign(LPDWORD lpIn)
{
ULONG ul;
ul = (ULONG)lpIn;
ul += 3;
ul >>= 2;
ul <<= 2;
return((LPDWORD)ul);
}
#define TEMPLATE_SIZE 2048 // increate it if the dlg has many items
BOOL CDlgExceptionData::ChangeDlgStyle(int resInt, CDialogEx *pDlg)
{
if (NULL == pDlg)
{
return FALSE;
}
HINSTANCE hInst = AfxFindResourceHandle(MAKEINTRESOURCE(resInt), RT_DIALOG);
HRSRC hRes = ::FindResource(hInst, MAKEINTRESOURCE(resInt), RT_DIALOG);
HGLOBAL hTemplate = ::LoadResource(hInst, hRes);
DLGTEMPLATEEX *pTemplate = (DLGTEMPLATEEX *)LockResource(hTemplate);
HWND hDlg = 0;
BYTE *pByte = new BYTE[TEMPLATE_SIZE];
//
if (pTemplate->signature == 0xFFFF)
{//ex
DLGTEMPLATEEX *pNewTmp = (DLGTEMPLATEEX *)lpdwAlign((LPDWORD)pByte);
CopyMemory(pNewTmp, pTemplate, TEMPLATE_SIZE);
pNewTmp->style &= ~WS_CAPTION;
pNewTmp->style &= ~DS_MODALFRAME;
pNewTmp->style &= ~WS_POPUP;
pNewTmp->style &= ~WS_VISIBLE;
pNewTmp->style &= ~WS_BORDER;
pNewTmp->style |= WS_CHILD;
hDlg = CreateDialogIndirect(hInst, // handle to application instance
(const DLGTEMPLATE *)pNewTmp, // pointer to dialog box template
this->m_hWnd, // handle to owner window
0); // pointer to dialog box procedure
}
else
{//
DLGTEMPLATE *pNewTmp = (DLGTEMPLATE *)lpdwAlign((LPDWORD)pByte);
CopyMemory(pNewTmp, pTemplate, TEMPLATE_SIZE);
pNewTmp->style &= ~WS_CAPTION;
pNewTmp->style &= ~DS_MODALFRAME;
pNewTmp->style &= ~WS_POPUP;
pNewTmp->style &= ~WS_VISIBLE;
pNewTmp->style &= ~WS_BORDER;
pNewTmp->style |= WS_CHILD;
hDlg = CreateDialogIndirect(hInst, // handle to application instance
(const DLGTEMPLATE *)pNewTmp, // pointer to dialog box template
this->m_hWnd, // handle to owner window
0); // pointer to dialog box procedure
}
UnlockResource(hTemplate);
FreeResource(hTemplate);
delete[] pByte;
//
if (hDlg)
{
pDlg->SubclassWindow(hDlg);
return TRUE;
}
return FALSE;
typedef struct {
WORD dlgVer;
WORD signature;
DWORD helpID;
DWORD exStyle;
DWORD style;
WORD cDlgItems;
short x;
short y;
short cx;
short cy;
#if 0
WORD menu; // if this word=0 no menu elseif this=0xFFFF follows another word stand for ID
WORD windowClass;// elseif not 0 | not -1 then follows the name
WCHAR title[1]; // title string of the dialog box
short pointsize; // only if DS_SETFONT flag is set
short weight; // only if DS_SETFONT flag is set
short bItalic; // only if DS_SETFONT flag is set
WCHAR font[]; // typeface name, if DS_SETFONT is set
#endif
} DLGTEMPLATEEX, *LPDLGTEMPLATEEX;
//
typedef struct {
DWORD helpID;
DWORD exStyle;
DWORD style;
short x;
short y;
short cx;
short cy;
DWORD id;//not WORD !
#if 0
WORD windowClass; // name or ordinal of a window class
WORD title; // title string or ordinal of a resource
WORD extraCount; // bytes? of following creation data
#endif
}DLGITEMTEMPLATEEX, *LPDLGITEMTEMPLATEEX;
#pragma pack()
//Make point DWORD alignment
LPDWORD lpdwAlign(LPDWORD lpIn)
{
ULONG ul;
ul = (ULONG)lpIn;
ul += 3;
ul >>= 2;
ul <<= 2;
return((LPDWORD)ul);
}
#define TEMPLATE_SIZE 2048 // increate it if the dlg has many items
BOOL CDlgExceptionData::ChangeDlgStyle(int resInt, CDialogEx *pDlg)
{
if (NULL == pDlg)
{
return FALSE;
}
HINSTANCE hInst = AfxFindResourceHandle(MAKEINTRESOURCE(resInt), RT_DIALOG);
HRSRC hRes = ::FindResource(hInst, MAKEINTRESOURCE(resInt), RT_DIALOG);
HGLOBAL hTemplate = ::LoadResource(hInst, hRes);
DLGTEMPLATEEX *pTemplate = (DLGTEMPLATEEX *)LockResource(hTemplate);
HWND hDlg = 0;
BYTE *pByte = new BYTE[TEMPLATE_SIZE];
//
if (pTemplate->signature == 0xFFFF)
{//ex
DLGTEMPLATEEX *pNewTmp = (DLGTEMPLATEEX *)lpdwAlign((LPDWORD)pByte);
CopyMemory(pNewTmp, pTemplate, TEMPLATE_SIZE);
pNewTmp->style &= ~WS_CAPTION;
pNewTmp->style &= ~DS_MODALFRAME;
pNewTmp->style &= ~WS_POPUP;
pNewTmp->style &= ~WS_VISIBLE;
pNewTmp->style &= ~WS_BORDER;
pNewTmp->style |= WS_CHILD;
hDlg = CreateDialogIndirect(hInst, // handle to application instance
(const DLGTEMPLATE *)pNewTmp, // pointer to dialog box template
this->m_hWnd, // handle to owner window
0); // pointer to dialog box procedure
}
else
{//
DLGTEMPLATE *pNewTmp = (DLGTEMPLATE *)lpdwAlign((LPDWORD)pByte);
CopyMemory(pNewTmp, pTemplate, TEMPLATE_SIZE);
pNewTmp->style &= ~WS_CAPTION;
pNewTmp->style &= ~DS_MODALFRAME;
pNewTmp->style &= ~WS_POPUP;
pNewTmp->style &= ~WS_VISIBLE;
pNewTmp->style &= ~WS_BORDER;
pNewTmp->style |= WS_CHILD;
hDlg = CreateDialogIndirect(hInst, // handle to application instance
(const DLGTEMPLATE *)pNewTmp, // pointer to dialog box template
this->m_hWnd, // handle to owner window
0); // pointer to dialog box procedure
}
UnlockResource(hTemplate);
FreeResource(hTemplate);
delete[] pByte;
//
if (hDlg)
{
pDlg->SubclassWindow(hDlg);
return TRUE;
}
return FALSE;
}
//实例
在头文件中声明
CDlgImgManager m_dlgImgShowManager;
在cpp的 OnInitDialog()中加入
if (!m_dlgImgShowManager.m_hWnd)
{
ChangeDlgStyle(CDlgImgManager::IDD, &m_dlgImgShowManager); //改变串口类型为 child
//m_dlgImgShowManager.SetDlgPopUpFlag(FALSE);
m_dlgImgShowManager.OnInitDialog();
m_dlgImgShowManager.ShowWindow(SW_SHOW);
}
m_dlgImgShowManager.MoveWindow(rectImgShowDlg);
//当模态对话框使用方法 依旧