__win32控件(1)__教你玩美觀的按鈕控件

本文由BlueCoder編寫   轉載請說明出處:

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

我的郵箱:[email protected]    歡迎大家和我交流編程心得

我的微博: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);
}


來看看效果吧:

 


源代碼以及相關資源下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章