Форум программистов, компьютерный форум, киберфорум
Наши страницы

Visual C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Byurrer
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 110
#1

Подмена оконной процедуры (SetWindowLong) - Visual C++

08.08.2012, 19:06. Просмотров 1357. Ответов 0
Метки нет (Все метки)

Здравствуйте, взялся за пробу GUI на WinApi, но столкнулся с проблемой, создаю кнопку, и подменяю ее оконную процедуру, но кнопка после подмены не отображается, SetWindowLong возвращает не ноль, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
...
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
    case WM_DESTROY:
        ::PostQuitMessage(0);
        break;
    }
    return ::DefWindowProc(hwnd, msg, wParam, lParam);
}
 
LRESULT CALLBACK WndProcButton1(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
    case WM_DESTROY:
        ::PostQuitMessage(0);
        break;
    }
    return ::DefWindowProc(hwnd, msg, wParam, lParam);
}
...
 
HWND hButton = CreateWindow("BUTTON", "Press me", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 80, 30, MainWnd.GetHWND(), NULL, hinstance, NULL);
RECT* rect = new RECT;
GetWindowRect(hButton,rect);
LONG tmp = SetWindowLong(hButton, GWL_WNDPROC, (LONG)WndProcButton1);
//SetWindowLong(hButton, GWL_WNDPROC, tmp);
InvalidateRect(hButton,rect,TRUE);
UpdateWindow(hButton);
Но если раскоментировать строку:
SetWindowLong(hButton, GWL_WNDPROC, tmp);
то есть установить старую оконную процедуру то кнопка вновь отрисовывается, не могу понять в чем проблема? Подскажите пожалуйста. Заранее спасибо!

Добавлено через 3 часа 46 минут
Всем спасибо, вроде разобрался, нужно было из новой оконной процедуры вызывать старую оконную процедуру после обработки всех нужных действий.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 19:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подмена оконной процедуры (SetWindowLong) (Visual C++):

Подмена нажатой кнопки - Visual C++
Написал программку, через хук перехватывает сообщение от клавиатуры и определяет какая кнопка была нажата и при помощи keybd_event нажимаю...

OpenCV подмена изображений - Visual C++
Всем привет. Проблема такова, сделал класс для обработки кадров (с веб камеры), но не всегда нормально могу передать изображение. ...

Перехват и подмена вызываемых функций - C++
Здравствуйте. Нужно подменить вызов таких функций как open(), lstat(), stat(), read(), write(), mkdir(), chdir(), getcwd() для...

Подмена установленной оконной процедуры на процедуру, являющуюся членом класса - C++ WinAPI
Здравствуйте! У меня проблема с подменой установленной оконной процедуры на процедуру, являющуюся членом класса. Делал по разным примерам,...

Какое число нужно возвращать из оконной процедуры? - C++ WinAPI
Возвращается результат вызова DefWindowProc() в тех случаях, когда сообщение не обрабатывает пользователь. А если сообщение...

Каковы в x64 типы параметров оконной процедуры? - C++ WinAPI
По-прежнему HWND, UINT, WPARAM, LPARAM?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2012, 19:06
Привет! Вот еще темы с ответами:

Отправка сообщения главному окну (SendMessage) из оконной процедуры дочернего окна - C++ WinAPI
При нажатии Энтера в дочернем окне управления hwndEditFKern, главное окно hwnd должно обработать нажатие Энтера, но почему то как я понимаю...

Подмена файла hosts, подмена стартовой страницы, обращение utorrent к подозрительным адресам - Удаление вирусов
Добрый день! Попал в руки ноутбук со следующей проблемой: браузер не открывал доступ к сайтам и поисковым системам, сообщая о использовании...

SetWindowLong и Стили - C++ WinAPI
Имеется окно: g1_r1_des = CreateWindowEx(0, "Window1", "Окно 1", WS_CHILD|WS_CLIPSIBLINGS, ...

SetWindowLong и GWL_WNDPROC - C++ WinAPI
Надо сменить процедуру дочернего окна, чтобы лучше обрабатывать сообщения (нужна универсальность, WM_COMMAND не достаточно). Однако, если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.