Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2008, 22:40   #1
HunterMan
Пользователь
 
Регистрация: 01.04.2008
Сообщений: 58
По умолчанию Оконная процедура

Вот к примеру. В главном окне я создал дочерние
wnd=CreateWindowExA(WS_EX_TOOLWINDO W, WC_LISTVIEWA,
"", WS_CHILD | LVS_REPORT | WS_VISIBLE|WS_DLGFRAME|WS_CAPTION|W S_HSCROLL ,1,rect.bottom-200,rect.right/2,170,hWnd,NULL,MainIns,NULL);

Мне нужно сделать, чтобы это дочерние окно не можна было двигать. Предположительно я должен обработать сообщение WM_MOVE в оконной процедуре. А как мне получить доступ до оконной процедуры созданного таким образом окна??


А может есть иной способ сделать так чтобы оно не двигалось?

Заранее спс.
HunterMan вне форума Ответить с цитированием
Старый 31.05.2008, 00:55   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от HunterMan Посмотреть сообщение
А как мне получить доступ до оконной процедуры созданного таким образом окна??
Код:
<АДРЕС_СТАРОЙ_ПРОЦЕДУРЫ> = SetWindowLong(hWnd, GWL_WNDPROC, <_АДРЕС_НОВОЙ_ПРОЦЕДУРЫ>);
Новая должна быть определена по прототипу
Код:
LRESULT (CALLBACK* WNDPROC) (HWND, UINT, WPARAM, LPARAM);
, все необработаные сообщения нужно передавать старой процедуре, лучше через CallWindowProc.
http://msdn.microsoft.com/en-us/libr...70(VS.85).aspx

Только не стоит трогать WM_MOVE, лучше разбираться, например, в WM_SYSCOMMAND с SC_MOVE.

Цитата:
Сообщение от HunterMan Посмотреть сообщение
А может есть иной способ сделать так чтобы оно не двигалось?
А зачем ему WS_CAPTION?
B_N вне форума Ответить с цитированием
Старый 31.05.2008, 04:33   #3
HunterMan
Пользователь
 
Регистрация: 01.04.2008
Сообщений: 58
По умолчанию

В том то и дело, что нужен. Небыло бы заголовка, то и вопрос не подымался б.

Спс за помощ.
HunterMan вне форума Ответить с цитированием
Старый 02.06.2008, 17:23   #4
HunterMan
Пользователь
 
Регистрация: 01.04.2008
Сообщений: 58
По умолчанию

А как узнать адресс оконной процедуры, которая обрабатывает сообщения окон класса ListView?? Да и вообще любого из определенных стандартных классов.
HunterMan вне форума Ответить с цитированием
Старый 02.06.2008, 17:49   #5
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

GetClassLong, GetClassInfo
B_N вне форума Ответить с цитированием
Старый 04.06.2008, 12:10   #6
HunterMan
Пользователь
 
Регистрация: 01.04.2008
Сообщений: 58
По умолчанию

Если не затрудняет, то привидите пример, как правильно обработать сообщение WM_SYSCOMMAND c SC_MOVE?
Я написал вот так вот:

Код:
	if (Msg == WM_SYSCOMMAND)
	{
		switch(wParam&0xFFF0)
		{
		case SC_MOVE:
				return 0;
		}
		return CallWindowProc(Result1, hWnd, Msg, 
        wParam, lParam); 
	}
Вроде работает. Покатит такой вариант?

//Не забывайте тэг [code]. Не нагружайте лишней работой.

Последний раз редактировалось B_N; 04.06.2008 в 13:21.
HunterMan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура не работает Михаил Юрьевич Общие вопросы Delphi 4 03.06.2008 07:22
Процедура () GAGARIN-NEW Помощь студентам 3 17.12.2007 21:42
процедура sееk Snake_ua Паскаль, Turbo Pascal, PascalABC.NET 1 02.11.2007 16:22
процедура Sergik1977 Паскаль, Turbo Pascal, PascalABC.NET 7 28.10.2007 16:36
Процедура, вычисляющая Y=a*cos(G) и X=a*sin(G) Vishez Помощь студентам 4 25.04.2007 17:41