15,979
社区成员
发帖
与我相关
我的任务
分享
LPWORD lpwAlign ( LPWORD lpIn)
{
DWORD_PTR ul = (DWORD_PTR) lpIn;
ul = (ul + 3) & ~3;
return (LPWORD) ul;
}
// default Dialog Style
DWORD GetDialogStyle()
{
return WS_POPUP | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | WS_CAPTION | WS_MINIMIZEBOX;
}
LPCDLGTEMPLATE GetDialogTemplate(DWORD dwDlgStyle, LPCWSTR szCaption)
{
static BYTE pDlgTemplate[2048] = "";
static BOOL bValid = FALSE;
if (bValid)
return (LPCDLGTEMPLATE)pDlgTemplate;
LPDLGTEMPLATE lpdt;
LPWORD lpw;
LPWSTR lpwsz;
int nchar;
lpdt = (LPDLGTEMPLATE)pDlgTemplate;
// Define a dialog box.
lpdt->style = (dwDlgStyle & ~DS_SETFONT); // 这里设置窗口风格
lpdt->dwExtendedStyle = WS_EX_CONTROLPARENT; // 这里设置扩展窗口风格
lpdt->cdit = 0; // number of controls
lpdt->x = 0; lpdt->y = 0; // 这里设置窗口大小
lpdt->cx = 300; lpdt->cy = 300;
lpw = (LPWORD) (lpdt + 1);
*lpw++ = 0; // no menu
*lpw++ = 0; // predefined dialog box class (by default)
lpwsz = (LPWSTR) lpw;
lstrcpyW(lpwsz, szCaption);
nchar = lstrlenW(szCaption);
lpw += nchar;
lpw = lpwAlign (lpw); // align DLGITEMTEMPLATE on DWORD boundary
bValid = TRUE;
return (LPCDLGTEMPLATE)lpdt;
}
::DialogBoxIndirect(NULL, (LPCDLGTEMPLATE)GetDialogTemplate(GetDialogStyle(),L"dialog caption"), hWndParent, DialogProc);