У меня есть следующий код, см. ниже.
Почему код case WM_KILLFOCUS в WinMain() > никогда не достигалось?
Если я удалю case WM_KILLFOCUS из WndProc(), тот, что в WinMain(), все равно не будет достигнут.
Регистр WM_KEYDOWN работает нормально.
Как исправить код, чтобы регистр WM_KILLFOCUS в < strong>WinMain() достигнут?
Код довольно простой.
Спасибо .
#include
HINSTANCE m_hinstance_Module = NULL;
HWND m_hwnd_Window = NULL;
LRESULT CALLBACK WndProc(HWND hwnd, UINT umessage, WPARAM wparam, LPARAM lparam)
{
switch (umessage)
{
case WM_KILLFOCUS:
// THE CODE REACHES THIS POINT.
MessageBoxA(hwnd, "WM_KILLFOCUS", "WndProc()", 0);
return DefWindowProc(hwnd, umessage, wparam, lparam);
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CLOSE:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd, umessage, wparam, lparam);
}
// Done.
return 0;
}
void InitializeWindow()
{
WNDCLASSEX struct_WNDCLASSEX;
m_hinstance_Module = GetModuleHandle(NULL); // If this parameter is NULL, GetModuleHandle returns a
handle to the file used to create the calling process (.exe file).
struct_WNDCLASSEX.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
struct_WNDCLASSEX.lpfnWndProc = WndProc;
struct_WNDCLASSEX.cbClsExtra = 0;
struct_WNDCLASSEX.cbWndExtra = 0;
struct_WNDCLASSEX.hInstance = m_hinstance_Module;
struct_WNDCLASSEX.hIcon = LoadIcon(NULL, IDI_WINLOGO);
struct_WNDCLASSEX.hIconSm = struct_WNDCLASSEX.hIcon;
struct_WNDCLASSEX.hCursor = LoadCursor(NULL, IDC_ARROW);
struct_WNDCLASSEX.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
struct_WNDCLASSEX.lpszMenuName = NULL;
struct_WNDCLASSEX.lpszClassName = L"TEST";
struct_WNDCLASSEX.cbSize = sizeof(WNDCLASSEX);
RegisterClassEx(&struct_WNDCLASSEX);
m_hwnd_Window = CreateWindowEx(WS_EX_APPWINDOW, L"TEST", L"TEST", WS_OVERLAPPEDWINDOW, 0, 0, 800,
600, NULL, NULL, m_hinstance_Module, NULL);
ShowWindow(m_hwnd_Window, SW_SHOW);
SetForegroundWindow(m_hwnd_Window);
SetFocus(m_hwnd_Window);
}
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine,
_In_ int nShowCmd)
{
MSG structMsg;
bool blnDone = false;
InitializeWindow();
ZeroMemory(&structMsg, sizeof(MSG));
while (!blnDone)
{
if (PeekMessage(&structMsg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&structMsg);
DispatchMessage(&structMsg);
}
if (structMsg.message == WM_QUIT)
{
blnDone = true;
}
else
{
switch (structMsg.message)
{
case WM_KILLFOCUS:
// THE CODE NEVER REACHES THIS POINT.
MessageBoxA(m_hwnd_Window, "WM_KILLFOCUS", "WinMain()", 0);
break;
case WM_KEYDOWN:
MessageBoxA(m_hwnd_Window, "WM_KEYDOWN", "WinMain()", 0);
break;
}
}
}
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/601 ... ocus-logic
Логика WM_KILLFOCUS ⇐ C++
Программы на C++. Форум разработчиков
1710896251
Anonymous
У меня есть следующий код, см. ниже.
Почему код [b]case WM_KILLFOCUS[/b] в [b]WinMain()[/b] > никогда не достигалось?
Если я удалю [b]case WM_KILLFOCUS[/b] из [b]WndProc()[/b], тот, что в [b]WinMain()[/b], все равно не будет достигнут.
[b]Регистр WM_KEYDOWN[/b] работает нормально.
Как исправить код, чтобы [b]регистр WM_KILLFOCUS[/b] в < strong>WinMain() достигнут?
Код довольно простой.
Спасибо .
#include
HINSTANCE m_hinstance_Module = NULL;
HWND m_hwnd_Window = NULL;
LRESULT CALLBACK WndProc(HWND hwnd, UINT umessage, WPARAM wparam, LPARAM lparam)
{
switch (umessage)
{
case WM_KILLFOCUS:
// THE CODE REACHES THIS POINT.
MessageBoxA(hwnd, "WM_KILLFOCUS", "WndProc()", 0);
return DefWindowProc(hwnd, umessage, wparam, lparam);
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CLOSE:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hwnd, umessage, wparam, lparam);
}
// Done.
return 0;
}
void InitializeWindow()
{
WNDCLASSEX struct_WNDCLASSEX;
m_hinstance_Module = GetModuleHandle(NULL); // If this parameter is NULL, GetModuleHandle returns a
handle to the file used to create the calling process (.exe file).
struct_WNDCLASSEX.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
struct_WNDCLASSEX.lpfnWndProc = WndProc;
struct_WNDCLASSEX.cbClsExtra = 0;
struct_WNDCLASSEX.cbWndExtra = 0;
struct_WNDCLASSEX.hInstance = m_hinstance_Module;
struct_WNDCLASSEX.hIcon = LoadIcon(NULL, IDI_WINLOGO);
struct_WNDCLASSEX.hIconSm = struct_WNDCLASSEX.hIcon;
struct_WNDCLASSEX.hCursor = LoadCursor(NULL, IDC_ARROW);
struct_WNDCLASSEX.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
struct_WNDCLASSEX.lpszMenuName = NULL;
struct_WNDCLASSEX.lpszClassName = L"TEST";
struct_WNDCLASSEX.cbSize = sizeof(WNDCLASSEX);
RegisterClassEx(&struct_WNDCLASSEX);
m_hwnd_Window = CreateWindowEx(WS_EX_APPWINDOW, L"TEST", L"TEST", WS_OVERLAPPEDWINDOW, 0, 0, 800,
600, NULL, NULL, m_hinstance_Module, NULL);
ShowWindow(m_hwnd_Window, SW_SHOW);
SetForegroundWindow(m_hwnd_Window);
SetFocus(m_hwnd_Window);
}
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine,
_In_ int nShowCmd)
{
MSG structMsg;
bool blnDone = false;
InitializeWindow();
ZeroMemory(&structMsg, sizeof(MSG));
while (!blnDone)
{
if (PeekMessage(&structMsg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&structMsg);
DispatchMessage(&structMsg);
}
if (structMsg.message == WM_QUIT)
{
blnDone = true;
}
else
{
switch (structMsg.message)
{
case WM_KILLFOCUS:
// THE CODE NEVER REACHES THIS POINT.
MessageBoxA(m_hwnd_Window, "WM_KILLFOCUS", "WinMain()", 0);
break;
case WM_KEYDOWN:
MessageBoxA(m_hwnd_Window, "WM_KEYDOWN", "WinMain()", 0);
break;
}
}
}
return 0;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/60125261/wm-killfocus-logic[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия