《Windows程序设计》之按钮

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);
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值