Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi | создание окна и его элементов средствами WinAPI

Ответить
Настройки темы
Delphi - Delphi | создание окна и его элементов средствами WinAPI

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Подскажите, в чем трабл...
Код: Выделить весь код
 ........
  handleWnd:=CreateWindow(myClassName, 'See a label below?', WS_OVERLAPPEDWINDOW,400,300,200,100,0,0,hInstance,nil);
  if handleWnd = 0 then begin // окно создается
	MessageBox(0,'Failed to create Window',nil,MB_OK);
	Exit;
  end;
  Label1:=CreateWindow('Label','See me?',WS_VISIBLE or WS_CHILD or WM_SETTEXT,10,10,60,23,handleWnd,0,hInstance,nil);
  if Label1 = 0 then begin // а текст нет :(
	MessageBox(0, 'Failed to create Label', nil, MB_OK);
	Exit;
  end;
........

Отправлено: 08:14, 17-01-2005

 

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


frizzn
О'кей, тогда переделаем нижнюю часть в такую конструкцию:
Код: Выделить весь код
...........
  while GetMessage(Msg, handleWnd, 0, 0) do begin
    if Msg.message=WM_DESTROY then Break;
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
  MessageBox(0,'Yeah :(','Can't see me?',MB_OK);
..........
WM_DESTROY ведь посылается когда окно еще живо, так? А из цикла программа не выходит все равно. Или я опять чего-то наврал?..

Отправлено: 08:32, 18-01-2005 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать



http://ilyabirman.ru/meanwhile/2004/01/20/2/comments

Вообще-то, емнип, обычно hWnd используют в связке с if (PeekMessage(&msg, hWnd, ... потому что hWnd - своего рода фильтр


Отправлено: 09:47, 18-01-2005 | #12


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


hasherfrog
Цитата http://ilyabirman.ru/meanwhile/2004/01/20/2/comments:
<...> Не работает: при клике по крестику окно закрывается, а приложение — нет. Причем с F4 проверял, что WM_DESTROY приходит, PostQuitMessage вызывается, но WM_QUIT в очередь сообщений не запихивает; во всяком случае, GetMessage не возвращает 0, а должен при наличии WM_QUIT в очереди.
Прям точно что и у меня.

Цитата hasherfrog:
... потому что hWnd - своего рода фильтр
О'кей, фильтр... Но почему тогда в Windows SDK (в старом, в msdn еще не смотрел) дан пример:
Код: Выделить весь код
while (GetMessage( lpMsg, hWnd, 0, 0)) ...
ps: a lol вызвало "if Msg.message=WM_DESTROY then Break;"? Не волнуйтесь, у меня колбэк (callback) есть...

Отправлено: 09:59, 18-01-2005 | #13


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Нет, лол вызвало "Прям точно что и у меня."

Отправлено: 10:07, 18-01-2005 | #14

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Очень интересная тема, жаль что не поймал её сразу. Работает это так:
PostQuitMessage посылает сообщение PostMessage(0, 0, 0, exit_code), это значит, что до окна hwnd!=0 оно не дойдёт. После уничтожения окна, GetMessage(..., hwnd, ...) просто не вернётся, т.к. для окна hwnd сообщения никто не пошлёт. Советую не использовать такую конструкцию в главном цикле.

Отправлено: 14:15, 18-01-2005 | #15



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi | создание окна и его элементов средствами WinAPI

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Win32 API - Создание "сквозной" формы средствами WinAPI garkin123 Программирование и базы данных 7 14-11-2009 23:41
Delphi - WinApi||C++Builder(Delphi) SplashScreen в отдельном потоке? XCodeR Программирование и базы данных 4 12-03-2007 19:51
Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI DillerInc Программирование и базы данных 60 13-03-2006 21:36
Delphi - Delphi, WinAPI | Корректное завершение программы fossil Программирование и базы данных 6 10-08-2005 14:52
Delphi - *Решено* | Использование WinAPI под Delphi Savant Программирование и базы данных 2 14-01-2005 21:40




 
Переход