MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как в richedit отключить звук"
Answer 934445
Как-то так:
typedef LRESULT (CALLBACK * PWNDPROC ) (HWND, UINT, WPARAM, LPARAM); PWNDPROC RichEditOldWndProc = NULL; //указатель на стандартную WNDPROC элемента Rich Edit LRESULT CALLBACK RichEditNewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) //переопределенный WNDPROC для Rich Edit { CHARRANGE cr; int line; switch (message) { case WM_KEYDOWN: switch (wParam){ case VK_UP: //получаем текущую позицию курсора ZeroMemory(&cr,sizeof(cr)); SendMessage(hWnd, EM_EXGETSEL, 0, (LPARAM)&cr); //находим, на какой строке находится курсор line = SendMessage(hWnd, EM_EXLINEFROMCHAR, 0, cr.cpMin); //если курсор на первой строке, не передаем управление стандартной WNDPROC if(line == 0) return 0; break; } break; //аналогично для случаев вниз/вправо/влево... } //передаем управление стандартной WNDPROC... return RichEditOldWndProc(hWnd,message,wParam,lParam); } void InitRichEdit() { LoadLibrary(TEXT("Msftedit.dll")); HWND hwndEdit= CreateWindowEx(0, MSFTEDIT_CLASS, TEXT(""), ES_MULTILINE | WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP, x, y, width, height, hWnd, NULL, hInst, NULL); //сохраняем указатель на стандартную WNDPROC RichEditOldWndProc = (PWNDPROC) GetWindowLongPtr(hwndEdit, GWLP_WNDPROC); //переопределяем WNDPROC SetWindowLongPtr(hwndEdit, GWLP_WNDPROC, (LONG_PTR)RichEditNewWndProc); }
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.