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);
return 0;
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));
//设置背景透明
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:
//函数滚动所指定的窗口客户区域内容,-cyChar为向上滚动
ScrollWindow(hwnd,0,-cyChar,&rect,&rect);
hdc=GetDC(hwnd);
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)));
ReleaseDC(hwnd,hdc);
//更新无效区域
ValidateRect(hwnd,&rect);
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
《Windows程序设计》之按钮
最新推荐文章于 2021-10-26 15:37:23 发布