欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WIN32 控件基础

程序员文章站 2024-03-01 12:54:58
...

首先我们看下如下界面:
WIN32 控件基础

上面有一个弹窗,有两个控件,每个控件他们都是一个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 控件

我们看下另一个案例 按下按钮获取文本编辑框内容:

WIN32 控件基础

方式一:

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

相关标签: WIN32