Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

GetMessage

13K
12 сентября 2005 года
SignOff
4 / / 12.09.2005
BOOL bRet = true;
MSG msg;
bRet = GetMessage(&msg, hwnd, 0, 0);


hwnd существует и работает. Однако, GetMessage(&msg, hwnd, 0, 0) не возращает вообще ничего. Такое впечатление, будто прога входит в GetMessage и там зацикливается навсегда ничег не возвращая.

Как лечить(ся)?
299
12 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by SignOff
BOOL bRet = true;
MSG msg;
bRet = GetMessage(&msg, hwnd, 0, 0);


hwnd существует и работает. Однако, GetMessage(&msg, hwnd, 0, 0) не возращает вообще ничего. Такое впечатление, будто прога входит в GetMessage и там зацикливается навсегда ничег не возвращая.

Как лечить(ся)?


Такого не бывает. И код у тя маленький. Чего тебе лечить? И что он должен возвраащть? Какие у тебя проблемы??
Что код после GetMessage не выполняется?

13K
12 сентября 2005 года
SignOff
4 / / 12.09.2005
Цитата:
Originally posted by 3D Bob
Такого не бывает. И код у тя маленький. Чего тебе лечить? И что он должен возвраащть? Какие у тебя проблемы??
Что код после GetMessage не выполняется?



ОК. Вот код подлиней:

BOOL bRet = true;
MSG msg;
//bRet = GetMessage(&msg, NULL, NULL, NULL);
while((bRet = GetMessage(&msg, hwndChild, NULL, NULL)) != 0)
{
if(bRet == -1)
cout << "Error" << endl;
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
cout << msg.hwnd << endl;
}
cout << msg.hwnd << endl;
}

к сожалени, проблема остается та же...

406
12 сентября 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by SignOff
ОК. Вот код подлиней:

BOOL bRet = true;
MSG msg;
//bRet = GetMessage(&msg, NULL, NULL, NULL);
while((bRet = GetMessage(&msg, hwndChild, NULL, NULL)) != 0)
{
if(bRet == -1)
cout << "Error" << endl;
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
cout << msg.hwnd << endl;
}
cout << msg.hwnd << endl;
}

к сожалени, проблема остается та же...



код вроде правильный,попробуй перед циклом вызвать ShowWindow(hwndChild,SW_SHOW);
Если не поможет покажи как у тебя создается hwndChild

13K
12 сентября 2005 года
SignOff
4 / / 12.09.2005
.................

HWND hwnd;
char p[255];
while(1)
{
hwnd = ::FindWindow("CTable", NULL);

::EnumChildWindows(hwnd,EnumChildProc, NULL);



}
13K
12 сентября 2005 года
SignOff
4 / / 12.09.2005
HWND hwnd;
char p[255];
while(1)
{
hwnd = ::FindWindow("CVotBlinTable", NULL);// GetWindow(hwnd,GW_HWNDNEXT);
::EnumChildWindows(hwnd,EnumChildProc, NULL);
}

и функция:


BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{
char p[255];
::GetClassName(hwndChild, p, 1024);

if( strstr(p, "CGrid") &&
::IsWindowVisible(hwndChild) &&
::IsWindowEnabled(hwndChild)
)
{
BOOL bRet = true;
MSG msg;

while(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
if(msg.message == WM_QUIT)
cout << "Closing..." << endl;
else if(msg.message == WM_KEYUP)
cout << "KEY UP..." << endl;
else
cout << msg.message << endl;
TranslateMessage(&msg);
DispatchMessage(&msg);
cout << msg.message << endl;
}
}
return true;
}


Пояснения: СGrid — это грид — контрол т.е.

Нужно мне отоловить нажатие клавиш. А именно была ли нажата и код клавиши.
406
12 сентября 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by SignOff
HWND hwnd;
char p[255];
while(1)
{
hwnd = ::FindWindow("CVotBlinTable", NULL);// GetWindow(hwnd,GW_HWNDNEXT);
::EnumChildWindows(hwnd,EnumChildProc, NULL);
}

и функция:


BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{
char p[255];
::GetClassName(hwndChild, p, 1024);

if( strstr(p, "CGrid") &&
::IsWindowVisible(hwndChild) &&
::IsWindowEnabled(hwndChild)
)
{
BOOL bRet = true;
MSG msg;

while(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
if(msg.message == WM_QUIT)
cout << "Closing..." << endl;
else if(msg.message == WM_KEYUP)
cout << "KEY UP..." << endl;
else
cout << msg.message << endl;
TranslateMessage(&msg);
DispatchMessage(&msg);
cout << msg.message << endl;
}
}
return true;
}


Пояснения: СGrid — это грид — контрол т.е.

Нужно мне отоловить нажатие клавиш. А именно была ли нажата и код клавиши.



И че ты пытаешся сделать,терь понятно почему GetMessage ничего не возвращяет - да потому что у данного контрола уже есть свой обработчик и он перехватывает все системные сообщения. А для того чтобы тебе их перехватить нужно подменить его процедуру окна на свою и там уже отлавливать события,т.е. здесь используй субклассинг.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог