Код:
////////////////////////////////////////////////////////////////////////////////
// HowAreYou.cpp
#include <windows.h>
char g_szAppname[]="How Are You";
char g_szWndname[]="HOW_ARE_YOU";
char g_szMsg[]="HOW ARE YOU?\r\n";
HWND g_hwndBtn[2];
#define IDC_BT_0 101
#define IDC_BT_1 (IDC_BT_0+4)
#define IDC_BT_2 (IDC_BT_0+8)
BOOL OnCommand(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL Result=TRUE;
HWND hwndCtl=(HWND)lParam;
WORD Command=LOWORD(wParam);
WORD NotifyCode=HIWORD(wParam);
switch(Command)
{
case IDC_BT_0:
MessageBox(hWnd, "Good", g_szAppname, MB_OK|MB_ICONINFORMATION|MB_SETFOREGROUND|MB_TOPMOST);
break;
case IDC_BT_1:
MessageBox(hWnd, "Bad", g_szAppname, MB_OK|MB_ICONINFORMATION|MB_SETFOREGROUND|MB_TOPMOST);
break;
case IDC_BT_2:
//MessageBox(hWnd, "Abort", g_szAppname, MB_OK|MB_ICONINFORMATION|MB_SETFOREGROUND|MB_TOPMOST);
SendMessage(hWnd,WM_CLOSE,0,0);
break;
};// end Command
return Result;
}
void OnPaint(HWND hWnd)
{
PAINTSTRUCT ps;
HDC hDC=BeginPaint(hWnd, &ps);
RECT rect;
GetClientRect(hWnd, &rect);
//rect.left += (rect.right / 4);
//rect.top += (rect.bottom / 4);
//rect.right -= (rect.right / 4);
rect.left = 100;
rect.top = 10;
rect.right -= (rect.right / 4);
DrawText(hDC, g_szMsg, -1, &rect, DT_EXTERNALLEADING | DT_NOPREFIX | DT_WORDBREAK);
EndPaint(hWnd, &ps);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LRESULT retval=0;
static HWND hwndLastfocus;
switch(uMsg)
{
case WM_CREATE:
{
LPCREATESTRUCT lpCreateStruct=
reinterpret_cast
<LPCREATESTRUCT>(lParam);
for(int i = 0; i < 3; ++i)
{
g_hwndBtn[i]=
CreateWindowEx(0,
"button",
"",
BS_TEXT |
WS_CHILD |
WS_VISIBLE |
WS_TABSTOP |
BS_PUSHBUTTON,
0,0,0,0,
hWnd,
(HMENU)
(UINT_PTR)IDC_BT_0 + i,
lpCreateStruct->hInstance,
LPVOID(0));
if(!g_hwndBtn[i])
{
MessageBox(hWnd,
"Cannot create button",
g_szAppname,
MB_OK | MB_ICONSTOP |
MB_SETFOREGROUND | MB_TOPMOST);
return -1;
}
}
SetWindowText(g_hwndBtn[0], "Yes");
SetWindowText(g_hwndBtn[1], "No");
SetWindowText(g_hwndBtn[2], "Abort");
SendDlgItemMessage(hWnd,
IDC_BT_0,
BM_SETSTYLE,
BS_DEFPUSHBUTTON,
TRUE);
SetFocus(
GetDlgItem(hWnd,IDC_BT_0));
}
return 1;
case WM_ACTIVATE:
if(LOWORD(wParam)==WA_INACTIVE)
hwndLastfocus=GetFocus();
break;
case WM_SETFOCUS:
if(hwndLastfocus)
SetFocus(hwndLastfocus);
break;
case WM_WINDOWPOSCHANGING:
case WM_WINDOWPOSCHANGED:
{
HDWP hDWP;
RECT rc;
if(hDWP=BeginDeferWindowPos(3))// Deferring 3 child controls.
{
GetClientRect(hWnd,&rc);
#define Y_BUTTON_COMMON 50
int ButtonX = 10;
int ButtonY = Y_BUTTON_COMMON;
int ButtonLength = 100;
int ButtonThickness = 28;
hDWP = DeferWindowPos(hDWP,GetDlgItem(hWnd,IDC_BT_0),NULL,ButtonX,ButtonY,ButtonLength,ButtonThickness,SWP_NOZORDER|SWP_NOREDRAW);
ButtonX = ButtonLength + 20;
hDWP = DeferWindowPos(hDWP,GetDlgItem(hWnd,IDC_BT_1),NULL,ButtonX,ButtonY,ButtonLength,ButtonThickness,SWP_NOZORDER|SWP_NOREDRAW);
ButtonX = rc.right - 110;
hDWP = DeferWindowPos(hDWP,GetDlgItem(hWnd,IDC_BT_2),NULL,ButtonX,ButtonY,ButtonLength,ButtonThickness,SWP_NOZORDER|SWP_NOREDRAW);
EndDeferWindowPos(hDWP);
RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE|RDW_ALLCHILDREN|RDW_ERASE|RDW_NOFRAME|RDW_UPDATENOW);
}
}
break;
case WM_PAINT:
OnPaint(hWnd);
break;
case WM_COMMAND:
return OnCommand(hWnd,uMsg,wParam,lParam);
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
retval=DefWindowProc(hWnd,uMsg,wParam,lParam);
}
return retval;
}
//
// Entry point.
//
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hWnd=HWND_DESKTOP;
WNDCLASSEX wcex={sizeof(WNDCLASSEX), CS_VREDRAW | CS_HREDRAW, WndProc, 0, 0, hInstance,
LoadIcon(NULL, IDI_APPLICATION), LoadCursor(NULL, IDC_ARROW), (HBRUSH)(COLOR_WINDOW+1), NULL, g_szWndname, NULL,
};
ATOM Atom=RegisterClassEx(&wcex);
if(!Atom)
{
Atom=RegisterClass((LPWNDCLASS)&wcex.style);
if(!Atom)
{
MessageBox(hWnd, "Cannot RegisterClass", g_szAppname, MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
return EXIT_FAILURE;
}
}
int nWidth=400;
int nHeight=200;
hWnd=CreateWindowEx(WS_EX_WINDOWEDGE, MAKEINTATOM(Atom), g_szAppname, WS_OVERLAPPEDWINDOW,
((GetSystemMetrics(SM_CXSCREEN)-nWidth)/2), ((GetSystemMetrics(SM_CYSCREEN)-nHeight)/2),
nWidth, nHeight, HWND_DESKTOP, NULL, hInstance, NULL);
if(!hWnd)
{
MessageBox(hWnd, "Cannot CreateWindow", g_szAppname, MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
return EXIT_FAILURE;
}
ShowWindow(hWnd, SW_NORMAL);
UpdateWindow(hWnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
if(!IsDialogMessage(hWnd,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int)msg.wParam;
}
////////////////////////////////////////////////////////////////////////////////
// <<eof>> HowAreYou.cpp
////////////////////////////////////////////////////////////////////////////////