#include<Windows.h>
//9a 子视窗控制箱 按钮类别
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 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 = 0 ;
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, cyChar * (1 + 2 * i),
20 * cxChar, 7 * cyChar / 4,
hwnd,
(HMENU) i,
((LPCREATESTRUCT) lParam)->hInstance,//
NULL);
/*在处理 WM_CREATE 讯息的过程中, lParam 实际上是指向 CREATESTRUCT
(「建立结构」 ) 结构的指标, 该结构有一个 hInstance 成员。 所以将 lParam
转换成指向 CREATESTRUCT 结构的一个指标, 并取出 hInstance。*/
return 0 ;
/*
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hlnstance,
LPVOID lpParam);
*/
case WM_SIZE:
rect.left=24*cxChar;
rect.top=2*cyChar;
rect.right=LOWORD(lParam);
rect.bottom=HIWORD(lParam);
return 0;
case WM_PAINT:
InvalidateRect(hwnd,&rect,TRUE);
hdc = BeginPaint (hwnd, &ps) ;
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;//SYSTEM_FIXED_FONT:固定间距(等宽)系统字体,该对象仅提供给兼容16位Windows版本;
SetBkMode (hdc, TRANSPARENT) ;
TextOut (hdc, 24 * cxChar, cyChar, szTop, lstrlen (szTop)) ;
TextOut (hdc, 24 * cxChar, cyChar, szUnd, lstrlen (szUnd)) ;
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DRAWITEM :
case WM_COMMAND :
ScrollWindow (hwnd, 0, -cyChar, &rect, &rect) ;
//ScrollWindow 该函数滚动所指定的窗口客户区域内容。该函数存在向后兼容性,新的应用程序应使用ScrollWindowEX。
hdc = GetDC (hwnd) ;
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
TextOut( hdc, 24 * cxChar, cyChar * (rect.bottom / cyChar- 1),
szBuffer,
wsprintf (szBuffer, szFormat,
message == WM_DRAWITEM ?
TEXT ("WM_DRAWITEM") : TEXT ("WM_COMMAND"),
HIWORD (wParam), LOWORD (wParam) ,//
HIWORD (lParam), LOWORD (lParam))) ;//
/*
LOWORD (wParam) 子视窗 ID
HIWORD (wParam) 通知码
lParam 子视窗代号
*/
ReleaseDC (hwnd, hdc) ;//
ValidateRect (hwnd, &rect) ;
break ;
case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
9a 子视窗控制项--按钮类别
最新推荐文章于 2024-04-25 19:29:10 发布