Я пытаюсь создать простую программу, которую я могу использовать для упаковки программного обеспечения консоли. У меня есть основное окно с компонентом EDIT. Я знаю, что могу использовать WM_KEYUP
и другие, чтобы перехватить вход keyborad. Я не могу найти эффективный способ преобразования любого из параметров CALLBACK WinProc
; после чего я смогу завершить эту часть моей программы:Win32 - Как перехватить и обработать ввод в клавиатуру?
#include <windows.h>
#define IDC_MAIN_EDIT 101
#define WIDTH 800
#define HEIGHT 600
LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd) {
WNDCLASSEX wClass;
ZeroMemory(&wClass,sizeof(WNDCLASSEX));
wClass.cbSize=sizeof(WNDCLASSEX);
wClass.hbrBackground=(HBRUSH)COLOR_WINDOW;
wClass.hCursor=LoadCursor(NULL,IDC_ARROW);
wClass.hIcon=NULL;
wClass.hIconSm=NULL;
wClass.hInstance=hInst;
wClass.lpfnWndProc=(WNDPROC)WinProc;
wClass.lpszClassName="Window Class";
wClass.lpszMenuName=NULL;
wClass.style=CS_HREDRAW|CS_VREDRAW;
if(!RegisterClassEx(&wClass)) {
int nResult=GetLastError();
MessageBox(NULL,
"Window class creation failed",
"Window Class Failed",
MB_ICONERROR);
}
HWND hWnd=CreateWindowEx(0,
"Window Class",
"Windows application",
WS_OVERLAPPEDWINDOW,
200,
200,
640,
480,
NULL,
NULL,
hInst,
NULL);
if(!hWnd) {
int nResult=GetLastError();
MessageBox(NULL,
"Window creation failed",
"Window Creation Failed",
MB_ICONERROR);
}
ShowWindow(hWnd,nShowCmd);
MSG msg;
ZeroMemory(&msg,sizeof(MSG));
while(GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) {
static HWND hEdit;
switch(msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_CREATE:
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,
"EDIT",
"",
WS_CHILD|WS_VISIBLE|ES_MULTILINE|WS_VISIBLE|WS_VSCROLL|ES_MULTILINE,
0,
0,
WIDTH,
HEIGHT,
hWnd,
(HMENU)IDC_MAIN_EDIT,
GetModuleHandle(NULL),
NULL);
HFONT hFont = CreateFont(0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, TEXT("Courier New"));
SendMessage(hEdit, WM_SETFONT, (WPARAM)hFont, 0);
SendMessage(hEdit,
WM_SETTEXT,
0,
(LPARAM)"Insert text here...");
break;
case WM_SIZE:
MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
break;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}
То, что я должен был сказать: Я не могу найти способ перехвата ввода с клавиатуры в качестве символов. Как я могу перехватить весь обычный ввод с клавиатуры?
Что значит «я не может показаться эффективным средством для преобразования любого из параметров CALLBACK WinProc? Ваша проблема неясна. –
@JonathanPotter Извините, это лучше? – motoku
Когда пользователь вводит элемент управления редактирования, родительское окно будет получать уведомления «EN_CHANGE» в виде сообщений «WM_COMMAND» - это то, что вы ищете? –