WIN32 控制元件基礎

不會寫程式碼的絲麗發表於2020-11-11

首先我們看下如下介面:
在這裡插入圖片描述

上面有一個彈窗,有兩個控制元件,每個控制元件他們都是一個Window例項。

我們首先看下點選事件的互動程式碼:

//這是控制元件所在彈窗的事件過程函式
INT_PTR CALLBACK mydialog(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam) {
	
	//視窗關閉
	if (WM_CLOSE==msgType)
	{
		EndDialog(hwnd, 0);
		return TRUE;
	}
		//WM_COMMAND 有三種情況 快捷鍵  選單 控制元件資訊.具體請參考官網文件
	else if (WM_COMMAND==msgType)
	{
		//這裡直接判斷為控制元件型別即可
		//高字為	控制元件的事件比如BN_CLICKED為點選事件		
		WORD hWord = HIWORD(wparam);
		//低字為為控制元件id
		WORD lWord= LOWORD(wparam);
		//如果控制元件id為IDC_BUTTON1且事件型別為點選事件
		if (lWord== IDC_BUTTON1 && hWord==BN_CLICKED)
		{
			OutputDebugStringA("IDC_BUTTON1  \r\n");

		}
		//概念同上
		else if (lWord== IDC_CHECK1 && hWord == BN_CLICKED)
		{
			//得到當前控制元件對應的視窗例項(每個控制元件都是視窗例項)
			HWND child = GetDlgItem(hwnd, IDC_BUTTON1);
			//模擬傳送一個點選事件給IDC_BUTTON1
			SendMessageA(child, BM_CLICK, 0, 0);
			OutputDebugStringA("IDC_CHECK1 \r\n");

		}
		return TRUE;

	}
	return FALSE;
}

上面的程式碼寓意:
idIDC_BUTTON1 的控制元件觸發點選事件後列印輸出語句"IDC_BUTTON1 \r\n"
idIDC_CHECK1 的控制元件觸發點選事件後 手動發出一個點選事件給IDC_BUTTON1 控制元件

我們看下另一個案例 按下按鈕獲取文字編輯框內容:

在這裡插入圖片描述

方式一:

INT_PTR CALLBACK mydialog(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam) {
	
	if (WM_CLOSE==msgType)
	{
		EndDialog(hwnd, 0);
		return TRUE;
	}
	else if (WM_COMMAND==msgType)
	{
		WORD hWord = HIWORD(wparam);
		WORD lWord= LOWORD(wparam);
		if (lWord== IDC_BTN_GET_MSG && hWord==BN_CLICKED)
		{

			TCHAR tchar[30];

			HWND child = GetDlgItem(hwnd, IDC_EDIT1);
			
			//這個函式本質傳送一個訊息給系統,系統會把字串賦值到tachr
			
			SendDlgItemMessageA(hwnd, IDC_EDIT1, WM_GETTEXT, sizeof(tchar), (LPARAM)tchar);
			
			OutputDebugStringA("IDC_BUTTON1  \r\n");
			
			MessageBoxA(hwnd, tchar, "", MB_OK);
		}
		
		return TRUE;

	}
	return FALSE;
}

方式二:

INT_PTR CALLBACK mydialog(HWND hwnd, UINT msgType, WPARAM wparam, LPARAM lparam) {
	
	if (WM_CLOSE==msgType)
	{
		EndDialog(hwnd, 0);
		return TRUE;
	}
	else if (WM_COMMAND==msgType)
	{
		WORD hWord = HIWORD(wparam);
		WORD lWord= LOWORD(wparam);
		if (lWord== IDC_BTN_GET_MSG && hWord==BN_CLICKED)
		{

			TCHAR tachr[30];

			HWND child = GetDlgItem(hwnd, IDC_EDIT1);
			
			//這個函式本質傳送一個訊息給系統,系統會把字串賦值到tachr
			GetWindowTextA(child, tachr, sizeof(tachr));
			
			
			OutputDebugStringA("IDC_BUTTON1  \r\n");
			
			MessageBoxA(hwnd, tachr, "", MB_OK);
		}
		
		return TRUE;

	}
	return FALSE;
}

相關文章