| 
              #include <tchar.h>#include <Windows.h>
 #include <windowsx.h>
 
 #define ID_HELP 150
 #define ID_TEXT 200
 
 INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
 int nLen;
 int wmId, wmEvent;
 LPTSTR lpstr;
 
 switch (uMsg)
 {
 case WM_COMMAND:
 wmId = LOWORD(wParam);
 wmEvent = HIWORD(wParam);
 switch (wmId)
 {
 case IDOK:
 case IDCANCEL:
 EndDialog(hDlg, wmId);
 break;
 case ID_HELP:
 MessageBox(hDlg, TEXT("帮助内容"), TEXT("帮助标题"), MB_ICONINFORMATION);
 break;
 case ID_TEXT:
 if (wmEvent == STN_CLICKED)
 {
 nLen = Static_GetTextLength((HWND)lParam);
 lpstr = (LPTSTR)malloc((nLen + 1) * sizeof(TCHAR));
 Static_GetText((HWND)lParam, lpstr, nLen + 1);
 MessageBox(hDlg, lpstr, TEXT("文本内容"), MB_ICONINFORMATION);
 free(lpstr);
 }
 }
 break;
 }
 return FALSE;
 }
 
 // 使地址能被32整除
 void align32(LPWORD *ptr)
 {
 //*ptr = (LPWORD)((((ULONG)*ptr + 3) >> 2) << 2);
 
 ULONG ul;
 ul = (ULONG)*ptr;
 ul += 3;
 ul >>=2;
 ul <<=2;
 *ptr = (LPWORD)ul;
 }
 
 int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
 {
 LPWORD p;
 struct
 {
 DLGTEMPLATE tpl;
 WORD menu;
 WORD cls;
 WCHAR title[6];
 
 // 剩下的内容无法在结构体中表示, 因为无法确保地址能够被32整除
 BYTE controls[1000];
 } dlg;
 
 struct
 {
 DLGITEMTEMPLATE item;
 WORD menu;
 WORD cls;
 WCHAR text[3];
 WORD creation_data;
 } btn;
 
 // 对话框样式
 dlg.tpl.style = WS_POPUP | WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | DS_CENTER | DS_MODALFRAME; // 对话框样式
 dlg.tpl.dwExtendedStyle = (DWORD)NULL; // 对话框扩展样式
 dlg.tpl.cdit = 1; // 控件数量
 dlg.tpl.x = dlg.tpl.y = 0; // 对话框坐标, 单位: DU (对话框单位, Dialog Box Unit), 由于已在style中指定了DS_CENTER, 所以居中显示
 dlg.tpl.cx = 100; // 对话框宽度 (DU)
 dlg.tpl.cy = 100; // 对话框高度 (DU)
 
 dlg.menu = dlg.cls = (WORD)NULL; // 无菜单、对话框类
 lstrcpyW(dlg.title, L"示例对话框"); // 对话框标题, 必须为宽字符串
 
 // 确定按钮
 btn.item.style = WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON;
 btn.item.dwExtendedStyle = (DWORD)NULL;
 btn.item.x = 10;
 btn.item.y = 70;
 btn.item.cx = 80;
 btn.item.cy = 20;
 btn.item.id = IDOK;
 btn.menu = 0xffff;
 btn.cls = 0x80;
 lstrcpyW(btn.text, L"确定");
 btn.creation_data = (WORD)NULL;
 
 ZeroMemory(&dlg.controls, sizeof(dlg.controls));
 p = (LPWORD)&dlg.controls;
 align32(&p); // 使地址能够被32整除
 memcpy(p, &btn, sizeof(btn));
 p += sizeof(btn);
 
 // 帮助按钮
 btn.item.style = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON;
 btn.item.dwExtendedStyle = (DWORD)NULL;
 btn.item.x = 55;
 btn.item.y = 10;
 btn.item.cx = 40;
 btn.item.cy = 20;
 btn.item.id = ID_HELP;
 btn.menu = 0xffff;
 btn.cls = 0x80;
 lstrcpyW(btn.text, L"帮助");
 btn.creation_data = (WORD)NULL;
 
 align32(&p);
 memcpy(p, &btn, sizeof(btn));
 p += sizeof(btn);
 
 // 弹出对话框
 DialogBoxIndirect(hInstance, &dlg.tpl, NULL, DlgProc);
 return 0;
 }
 
 
 |