#include <windows.h>
struct
{
int iStyle ;
TCHAR * szText ;
}button[] ={
BS_PUSHBUTTON, TEXT ("PUSHBUTTON"),
BS_DEFPUSHBUTTON, TEXT ("DEFPUSHBUTTON"),
BS_CHECKBOX, TEXT ("CHECKBOX"),
BS_AUTOCHECKBOX, TEXT ("AUTOCHECKBOX"),
BS_RADIOBUTTON, TEXT ("RADIOBUTTON"),
BS_3STATE, TEXT ("3STATE"),
BS_AUTO3STATE, TEXT ("AUTO3STATE"),
BS_GROUPBOX, TEXT ("GROUPBOX"),
BS_AUTORADIOBUTTON, TEXT ("AUTORADIO"),
BS_OWNERDRAW, TEXT ("OWNERDRAW")
} ;
#define ID_TIMER 1
#define NUM (sizeof button / sizeof button[0])
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("BtnLook") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = sizeof(hwnd) ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("Button Look"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
static HWND hwndButton[NUM] ;
static RECT rect ;
static TCHAR szTop[] = TEXT ("message wParam lParam"),
szUnd[] = TEXT ("_______ ______ ______"),
szFormat[] = TEXT ("%-16s%04X-%04X %04X-%04X"),
szBuffer[50] ;
static int cxChar, cyChar ;
HDC hdc ;
PAINTSTRUCT ps ;
int i ;
switch(message)
{
case WM_CREATE:
{
cxChar = LOWORD(GetDialogBaseUnits());
cyChar = HIWORD(GetDialogBaseUnits());
for(i = 0 ; i< NUM ; i++)
{
hwndButton[i] = CreateWindow(TEXT("Button"),
button[i].szText,
WS_CHILD | WS_VISIBLE | button[i].iStyle,
cxChar * 2,cyChar * (1 + 2 * i),
cxChar * 20 , 7 * cyChar / 4,
hwnd,(HMENU) i ,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),
NULL);
}
SetTimer(hwnd,ID_TIMER,1000,NULL);
return 0;
}
case WM_SIZE:
{
GetWindowRect(hwnd,&rect);
rect.left = 24 * cxChar;
rect.top = cyChar ;
rect.right = LOWORD(lParam) ;
rect.bottom = HIWORD(lParam) ;
return 0 ;
}
case WM_PAINT:
{
hdc = BeginPaint(hwnd,&ps);
TextOut(hdc,30 * cxChar,cyChar * 2,szTop,sizeof(szTop) - 1);
TextOut(hdc,30 * cxChar,cyChar * 4,szUnd,sizeof(szUnd) - 1);
EndPaint(hwnd,&ps);
return 0;
}
case WM_TIMER:
{
SendMessage(hwndButton[4],BM_SETCHECK,1,0);
return 0 ;
}
case WM_COMMAND:
{
ScrollWindow(hwnd,0,cyChar,&rect,&rect);
hdc =GetDC(hwnd);
SetTextColor(hdc,RGB(255,0,0));
TextOut(hdc,30 * cxChar,
10 * cyChar,szBuffer,
wsprintf(szBuffer,szFormat,
"WM_CONNNED",HIWORD(wParam),
LOWORD(wParam),HIWORD(lParam),
LOWORD(lParam)));
ReleaseDC(hwnd,hdc);
return 0;
}
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}