WIN32 代码测试(Control)

WIN32 代码测试(Control),第1张

WIN32 代码测试(Control)
#include 
#include 
#include "resource.h"

#define IDC_STATIC	1001
#define IDC_BUTTON	1002
#define IDC_RADIO	1003
#define IDC_SCBL	1004
#define IDC_COMBOX	1005
#define IDC_LISTBOX 1006
#define IDC_EDIT	1007
#define IDC_EDIT_BTN_SET	1008
#define IDC_EDIT_BTN_CUT	1009
#define IDC_EDIT_BTN_UNDO	1010

#define  MAX_LOADSTRING 256

WCHAR szTitle[MAX_LOADSTRING] = L"demo";

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
bool  InitInstance(HINSTANCE hInstance, int   nCmdShow);
ATOM RegisterWndClass(HINSTANCE hInstance);

HINSTANCE g_hInstance;

HWND btn_edit;

int APIENTRY wWinMain(
	_In_ HINSTANCE hInstance,
	_In_ HINSTANCE hPrevInstance,
	_In_ LPWSTR lpCmdLine,
	_In_ int   nCmdShow) {

	g_hInstance = hInstance;

	RegisterWndClass(hInstance);
	if (!InitInstance(hInstance, nCmdShow)) {
		return -1;
	}

	MSG msg;
	while (GetMessage(&msg, nullptr, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return (int)msg.wParam;
}

ATOM RegisterWndClass(HINSTANCE hInstance) {
	WNDCLASS  wnd;
	wnd.cbClsExtra = 0;
	wnd.cbWndExtra = 0;
	wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
	wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);

	wnd.lpfnWndProc = WndProc;
	wnd.lpszClassName = szTitle;
	wnd.lpszMenuName = NULL;
	wnd.style = CS_HREDRAW | CS_VREDRAW;
	wnd.hInstance = hInstance;
	return RegisterClass(&wnd);
}

bool  InitInstance(HINSTANCE hInstance, int   nCmdShow) {
	HWND hWnd = CreateWindow(szTitle, L"windows", WS_OVERLAPPEDWINDOW, 0, 0, 600, 600,
		NULL, NULL, hInstance, NULL);
	if (!hWnd)
		return false;

	ShowWindow(hWnd, nCmdShow);
	UpdateWindow(hWnd);
	return true;
}

void onCreateMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
	//1、创建静态文本框
	HWND hStatic = CreateWindow(TEXT("STATIC"), TEXT("Test String"), WS_CHILD | WS_VISIBLE | WS_BORDER | SS_BITMAP | SS_NOTIFY,
		10, 10, 80, 20,  hWnd, (HMENU)IDC_STATIC, g_hInstance, NULL);
	//2、创建button
	CreateWindow(TEXT("BUTTON"), TEXT("Click Me"), WS_CHILD | WS_VISIBLE, 10, 60, 80, 20, hWnd, (HMENU)IDC_BUTTON, NULL, NULL);
	//3、创建单选框
	CreateWindow(TEXT("BUTTON"), TEXT("radio button"), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 134, 10, 40, 20, hWnd, (HMENU)IDC_RADIO, NULL, NULL);
	//4、创建复选框
	CreateWindow(TEXT("BUTTON"), TEXT("radio button"), WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 134, 40, 40, 20, hWnd, (HMENU)IDC_RADIO, NULL, NULL);
	//5、创建滚动条
	CreateWindow(TEXT("SCROLLBAR"), NULL, WS_CHILD | WS_VISIBLE | SBS_HORZ, 10, 90, 200, 20, hWnd, (HMENU)IDC_SCBL, NULL, NULL);
	//6、创建组合框
	CreateWindow(TEXT("COMBOBOX"), NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWNLIST, 10, 120, 100, 90, hWnd, (HMENU)IDC_COMBOX, NULL, NULL);
	//7、创建列表框
	HWND hListBox = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("LISTBOX"), NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD, 10, 150, 80, 90, hWnd, (HMENU)IDC_LISTBOX, NULL, NULL);
	//向末尾添加选项
	SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)L"B音乐");
	SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)L"A啤酒");
	SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)L"C啤酒");
	//插入字符串
	SendMessage(hListBox, LB_INSERTSTRING, 1, (LPARAM)L"炸鸡");

	//8、创建编辑控件
	btn_edit = CreateWindow(TEXT("EDIT"), TEXT("这是一个编辑框"), WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_NOHIDESEL,
		10, 250, 200, 30, hWnd, (HMENU)IDC_EDIT, g_hInstance, NULL);
	SendMessage(btn_edit, EM_SETSEL, 2, 6);
	HWND btn_edit_set = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("BUTTON"), NULL, WS_CHILD | WS_VISIBLE, 260, 255, 40, 20, hWnd, (HMENU)IDC_EDIT_BTN_SET, g_hInstance, NULL);
	HWND btn_edit_cut = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("BUTTON"), NULL, WS_CHILD | WS_VISIBLE, 310, 255, 40, 20, hWnd, (HMENU)IDC_EDIT_BTN_CUT, g_hInstance, NULL);
	HWND btn_edit_undo = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("BUTTON"), NULL, WS_CHILD | WS_VISIBLE, 360, 255, 40, 20, hWnd, (HMENU)IDC_EDIT_BTN_UNDO, g_hInstance, NULL);
	SetWindowText(btn_edit_set, TEXT("set"));
	SetWindowText(btn_edit_cut, TEXT("cut"));
	SetWindowText(btn_edit_undo, TEXT("undo"));

	//HBITMAP hBitmap = (HBITMAP)LoadImage(g_hInstance, L"./bitmap1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
	//加载位图
	HBITMAP  hBitmap = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
	HBITMAP hOldBitmap = (HBITMAP)SendMessage(hStatic, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);
	if (hOldBitmap)
		DeleteObject(hOldBitmap);
	//::InvalidateRect(hStatic, NULL, FALSE);
}

void onPaintMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
	PAINTSTRUCT ps;
	HDC hDc = BeginPaint(hWnd, &ps);
	HBITMAP hBitmap = (HBITMAP)LoadImage(g_hInstance, L"./bitmap1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
	HDC hMemDc = CreateCompatibleDC(hDc);
	HGDIOBJ hOld = SelectObject(hMemDc, hBitmap);
	BitBlt(hDc, 100, 200, 48, 48, hMemDc, 0, 0, SRCCOPY);
	SelectObject(hMemDc, hOld);
	DeleteObject(hBitmap);
	DeleteDC(hMemDc);
	EndPaint(hWnd, &ps);
	return;
}

void onCommandMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
	WORD  ctrl_id = LOWORd(wParam);//控件ID
	WORD  code = HIWORd(wParam);//消息类型
	HWND   hCtrl = (HWND)lParam;//窗口句柄
	switch (ctrl_id){
	case IDC_BUTTON:
		break;
	case IDC_EDIT_BTN_SET:
		if (code == STN_CLICKED) {
			TCHAR buffer[256];
			GetWindowText(btn_edit, buffer, 256);
			SendMessage(btn_edit, EM_SETSEL, 0, -1);
		}
		break;
	case IDC_EDIT_BTN_CUT:
		if (code == STN_CLICKED) {
			TCHAR buffer[256];
			GetWindowText(btn_edit, buffer, 256);
			SendMessage(btn_edit, WM_CUT, 0, 0);
		}
		break;
	case IDC_EDIT_BTN_UNDO:
		if (code == STN_CLICKED) {
			SendMessage(btn_edit, EM_UNDO, 0, 0);
		}
		break;
	case IDC_EDIT: 
		if (code == EN_CHANGE) {   //编辑控件内容改变
			TCHAR buffer[256];
			GetWindowText(btn_edit, buffer, 256);
			//MessageBox(NULL, buffer, TEXT(""), NULL);
		}
		break;
	case IDC_LISTBOX:
		if (code == LBN_SELCHANGE) {   
			//获取当前选择的索引
			int   index = SendMessage(hCtrl, LB_GETCURSEL, 0, 0);
			//获取索引对应的文本
			TCHAR  buf[64] = { 0 };
			SendMessage(hCtrl, LB_GETTEXT, index, (LPARAM)buf);
			MessageBox(hWnd, buf, L"提示", MB_OK);
		}
		break;
	default:
		break;
	}
}

HBRUSH onCTLColorStaticMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
	HDC hDC = (HDC)wParam;
	HWND hCTLWnd = (HWND)(lParam);
	UINT ctlID = GetWindowLong(hCTLWnd, GWL_ID);
	switch (ctlID){
	case IDC_STATIC:
		return CreateSolidBrush(RGB(0, 0, 255));
	default:
		break;
	}
}

HBRUSH onCTLColorEditMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
	HDC hDC = (HDC)wParam;
	HWND hCTLWnd = (HWND)(lParam);
	UINT ctlID = GetWindowLong(hCTLWnd, GWL_ID);
	switch (ctlID) {
	case IDC_EDIT:
		SetTextColor(hDC, RGB(255, 0, 0));//文字颜色
		SetBkMode(hDC, TRANSPARENT);//文字背景色
		return CreateSolidBrush(RGB(255, 255, 0));
	default:
		break;
	}
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
	LPCREATESTRUCT pcs = LPCREATESTRUCT(lParam);
	switch (message){
	case WM_CREATE:
		onCreateMessage(hWnd, message, wParam, lParam);
		return 0;
	case WM_PAINT:
		onPaintMessage(hWnd, message, wParam, lParam);
		break;
	case WM_COMMAND:
		onCommandMessage(hWnd, message, wParam, lParam);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	case WM_CTLCOLORSTATIC:
		return (LRESULT)onCTLColorStaticMessage(hWnd, message, wParam, lParam);
	case WM_CTLCOLOREDIT:
		return (LRESULT)onCTLColorEditMessage(hWnd, message, wParam, lParam);
	default:
		break;
	}
	return DefWindowProc(hWnd, message, wParam, lParam);
}

测试效果:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5690942.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存