Если, когда курсор находится в позиции 0,0 нажать влево или вверх (т.е. попытка выйти за пределы редактируемой области) то стандартный richedit даёт звуковой сигнал (bell наверно). Как убрать это пищание?
Использую CreateWindowEx, пример создания richedit http://docs.microsoft.com/en-us/windows/desktop/controls/create-rich-edit-controls где-то так:
LoadLibrary(TEXT("Msftedit.dll"));
HWND hwndEdit= CreateWindowEx(0, MSFTEDIT_CLASS, TEXT("Type here"),
ES_MULTILINE | WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP,
x, y, width, height,
hwndOwner, NULL, hinst, NULL);
P.S. В винде есть "яркий" пример скудного использования richedit - wordpad. Разработчики не стали заморачиваться - звук оставили (а может так и задумано). Запустить wordpad нажать влево - и будет тот же самый визг.
Если есть пример для делфи, для компонента СRichEdit и т п, который использует компоненту richedit WINAPI - то тоже подходит, я уже найду и докопаю как это сделать в WINAPI.
Как-то так:
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);
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Нужно сделать функцию, которая будет принимать от пользователя его вариант, а также другую функцию, которая будет определять, соответствует...
В методе insert класса Vector нужно передать итератор указывающий на позицию в которую ты хочешь поместить элемент, я правильно понимаю что для...
Извините за глупый вопрос, но я только начал осваивать С++Нашел в интернете код, где написана строка, но так и не смог понять, что она означает
Как лучше всего организовать структуру C++ проекта, использующего CMake и юнит-тесты?