#include <windows.h>
#include <stdio.h>
#include<CommCtrl.h>
#define MAX_LOADSTRING 256
WCHAR szTitle[MAX_LOADSTRING] = L"demo";
#define IDC_EDIT 1001
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WndEditProc(HWND, UINT, WPARAM, LPARAM);
bool InitInstance(HINSTANCE hInstance, int nCmdShow);
ATOM RegisterWndClass(HINSTANCE hInstance);
HWND hWndEdit = nullptr;
HINSTANCE g_hInstance = nullptr;
WNDPROC oldWndProc = nullptr;
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, 300, 300,
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) {
LPCREATESTRUCT pcs = (LPCREATESTRUCT)wParam;
/****** 窗口超类化 ********/
WNDCLASS wndclass;
GetClassInfo(NULL, WC_EDIT, &wndclass);
oldWndProc = wndclass.lpfnWndProc;
wndclass.lpfnWndProc = WndEditProc;
bool ret = RegisterClass(&wndclass);
/****** 创建编辑控件 ********/
hWndEdit = CreateWindow(TEXT("EDIT"), TEXT("这是一个编辑框"), WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 10, 300, 25, hWnd, (HMENU)IDC_EDIT, g_hInstance, NULL);
/****** 窗口子类化 ********/
//oldWndProc = (WNDPROC)SetWindowLong(hWndEdit, GWL_WNDPROC, (LONG)WndEditProc);
}
bool onCommandMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
HWND hctrl = (HWND)lParam;
WORD ctrl_id = LOWORD(wParam);
WORD msg = HIWORD(wParam);
switch (ctrl_id) {
case IDC_EDIT:
if (msg == EN_CHANGE) {
TCHAR buffer[256];
GetWindowText(hWndEdit, buffer, 256);
MessageBox(NULL, buffer, TEXT("edit"), NULL);
return 0;
}
break;
default:
break;
}
return false;
}
LRESULT CALLBACK WndEditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message){
case WM_LBUTTONDOWN:
MessageBox(NULL, TEXT("edit"), TEXT(""), NULL);
break;
default:
break;
}
return CallWindowProc(oldWndProc, hWnd, message, wParam, lParam);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message){
case WM_CREATE:
onCreateMessage(hWnd, message, wParam, lParam);
return 0;
case WM_COMMAND:
if (onCommandMessage(hWnd, message, wParam, lParam))
return 1;
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
07-18
119
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交