#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); }
测试效果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)