<Win32_13>__win32控件(1)__教你玩美观的按钮控件

本文由BlueCoder编写   转载请说明出处:

http://blog.csdn.net/crocodile__/article/details/10237943

我的邮箱:bluecoder@yeah.net    欢迎大家和我交流编程心得

我的微博:BlueCoder_黎小华    欢迎光临^_^




从今天开始,我将开始仔细讲一下win32中比较重要的一些控件的用法

 

好了,开始今天的讲解


一、初级篇——创建一般的按钮控件

按钮实质上就是窗口,因此它的创建本质上和创建窗口是一样的,也是用CreateWindow或者CreateWindowEx方法来创建,只不过有一些细节需要注意一下:

(1)在窗口风格中必须添加WS_CHILD,表示它是子窗口,属于一个父窗口;如果为了使按钮一创建就可见,就还得加上WS_VISIBLE

(2)CreateWindow或者CreateWindowEx中HMENU hMenu参数在创建子窗口时,是表示窗口的ID标示,在这里就表示按钮的ID标示

(3)win32所有控件的消息都归结到WM_COMMAND系统标准消息,看一看msdn关于这个消息的说明:

LRESULT CALLBACK WindowProc(
  HWND hwnd,       // handle to window
  UINT uMsg,       // WM_COMMAND
  WPARAM wParam,   // notification code and identifier
  LPARAM lParam    // handle to control (HWND)
);

重要的是wParam、lParam这两个参数:前者是一些通知码和标示(ID)、后者是对应的句柄

 

好了,接下来看看代码:

switch(message)
{
case WM_CREATE:
	SkinH_Attach();

	//创建按钮
	for(i=0; i<NUM; i++)
	{
		LONG BtnStyle = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_BITMAP;

		hButton[i] = CreateWindow(TEXT("button"), tBtnName[i],
					BtnStyle,
					0, 0, 0, 0, hwnd, (HMENU)iBtnID[i],
					((LPCREATESTRUCT)lParam)->hInstance, NULL);

		SetWindowText(hButton[i], tBtnName[i]);//设置按钮文本
			
		//创建字体
		ZeroMemory(&lf, sizeof(LOGFONT));
		lf.lfHeight		= -14;//字体的大小
		hFont = CreateFontIndirect(&lf);

		//修改字体
		SendMessage(hButton[i], WM_SETFONT, (WPARAM)hFont, 0);
	}
  	return 0 ;


 

//随着主窗口大小的改变来改变按钮的位置

case WM_SIZE:
	cyButton = HIWORD(lParam) / (NUM + 2);

	//通过适应窗口大小  来设定按钮的位置
	for(i=0; i<NUM; i++)
	{
		MoveWindow(hButton[i], 100, cyButton * (i + 1), 100, 60, TRUE);
	}
  	return 0 ;


//简单响应按钮按下的消息

case WM_COMMAND:
	switch(wParam)
	{
	case IDB_PUSHBUTTON1:
		MessageBox(hwnd, TEXT("按下按钮1"), TEXT("提示"), MB_OK);
		break;
	case IDB_PUSHBUTTON2:
		MessageBox(hwnd, TEXT("按下按钮2"), TEXT("提示"), MB_OK);
		break;
	case IDB_PUSHBUTTON3:
		MessageBox(hwnd, TEXT("按下按钮3"), TEXT("提示"), MB_OK);
		break;
	}
	return 0;


运行效果:


 

 

二、中级篇——创建win XP风格的按钮

如果你有MFC的开发经验,你应该比较喜欢MFC的按钮控件吧——OK,现在教你如何创建MFC样式的按钮

这个首先要看一看msdn相关的说明:

修改控件的风格

 

看完之后,你就应该知道怎么办了吧?

对,就在头文件中添加以下代码即可:

// Copy from MSDN   
#pragma comment(linker,"\"/manifestdependency:type='win32' "\
						"name='Microsoft.Windows.Common-Controls' "\
						"version='6.0.0.0' processorArchitecture='*' "\
						"publicKeyToken='6595b64144ccf1df' language='*'\"")


他就是是编译器使用Win XP的新式控件风格

 

ok,还是来看看效果:

 

这就是比较现代化的风格了,很漂亮

 

三、高级篇——给按钮添上"美丽的衣裳"——来一张位图

可能,你很清楚窗口添加位图的方式和方法,也许你会觉得这些方式方法稍微麻烦点儿,因此我得告诉你:给按钮添加位图是很容易的事儿

 

(1)首先加载位图,获取位图句柄

(2)发送消息,告诉Windows,当前按钮以这个位图作为背景图片

 

具体代码如下:

在WM_CREATE消息中做这些事儿

{
	HBITMAP	hBmp;//位图句柄

	//加载
	hBmp = LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance,
					   MAKEINTRESOURCE(iBmpID[i]));

	//发送消息
	SendMessage(hButton[i], BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBmp);
}


来看看效果吧:

 


源代码以及相关资源下载

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值