![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос о стилях окон [D6, WinME]
Владимир Березин © (2004-10-31 18:13:00)Здравствуйте!
Подскажите, пожалуйста, какие флаги WS_XX следует использовать
для получения окна у которого нет ничего кроме поверности?
У меня комбинация WS_POPUP or WS_VISIBLE почему-то дает невиди-
мое окно.
Vladimir Vorfolomeev (2004-10-31 22:40:00) [1]Насчет Msg и wParam правильно замечено. Но с win16 я с тобой GuAV не согласен, так как win16 не была многозадачной.
GuAV (2004-10-31 20:21:00) [2]Владимир Березин (31.10.04 19:18) [6]
while GetMessage(msg,Window,0,0) do
Смотрим в MSDN про GetMessage. Читаем warning.
> Halt
Зачем ? PostQuitMessage сделает то что описано в её названии и при получении Quit Message фция GetMessage вернёт False. А хальт - не хорошо.
Владимир Березин (31.10.04 19:18) [6]
function WinProc
(Window:HWND; Mes:Word;
WParam:Word;LParam:LongInt):Integer;stdcall
Неверно. Это только в win16 было так.
Надо так:
function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall;
Владимир Березин (2004-10-31 19:37:00) [3]>> Вместо CW_USEDEFAULT, поставь реальные значения.
>> Удачи тебе.
Спасибо, все получилось!
Vladimir Vorfolomeev (2004-10-31 19:22:00) [4]Вместо CW_USEDEFAULT, поставь реальные значения.
Удачи тебе.
Владимир Березин (2004-10-31 19:18:00) [5]>> Как ты создаеш окно?
Вот весь код.
program winmin;
{
**********************************
* *
* Минимальное Windows-приложение *
* *
**********************************
}
uses
Windows,
Messages;
const sClassName = 'WinClass';
sCaption = 'Минимальное приложение';
var Window:HWND;
wc:TWndClass;
msg:TMsg;
//--- Оконная функция ---
function WinProc
(Window:HWND; Mes:Word;
WParam:Word; LParam:LongInt):Integer;stdcall
begin
Result:=0;
case Mes of
WM_DESTROY: begin
PostQuitMessage(0);
Halt
end;
end;
Result:=DefWindowProc(Window,Mes,WParam,LParam)
end;
//--- Инициализация приложения ---
procedure AppInit;
begin
//--- Регистрация оконного класса ---
wc.style := CS_HREDRAW or CS_VREDRAW;
wc.lpfnWndProc := @WinProc;
wc.cbClsExtra := 0;
wc.cbWndExtra := 0;
wc.hInstance := HInstance;
wc.hIcon := LoadIcon(0, IDI_APPLICATION);
wc.hCursor := LoadCursor(0, IDC_ARROW);
wc.hbrBackground := GetStockObject(BLACK_BRUSH);
wc.lpszMenuName := nil;
wc.lpszClassName := sClassName;
RegisterClass(wc);
//--- Создание окна ---
Window:=CreateWindow(sClassName,
sCaption,
WS_VISIBLE or WS_POPUP,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,0,
hInstance,nil);
if Window=0 then Halt;
ShowWindow(Window, SW_SHOW);
UpdateWindow(Window);
end;
//--- Основной цикл ---
procedure AppRun;
begin
while GetMessage(msg,Window,0,0) do begin
TranslateMessage(msg);
DispatchMessage(msg)
end;
end;
begin
AppInit;
AppRun
end.
Vladimir Vorfolomeev (2004-10-31 19:11:00) [6]Как ты создаеш окно?
Если все на API, то во первых нужно
1) Зарегистрировать класс окна
2) Создать окно
3) Показать его
4) Обрабатывать сообщения
Наверно ты не обрабатываеш сообщения
Владимир Березин (2004-10-31 19:04:00) [7]>> Во первых поставь WS_POPUP и используй ShowWindow чтобы показать окно, также после этого рекомендуется обновить UpdateWindow
Это все сделано.
Vladimir Vorfolomeev (2004-10-31 19:00:00) [8]Во первых поставь WS_POPUP и используй ShowWindow чтобы показать окно, также после этого рекомендуется обновить UpdateWindow
Владимир Березин (2004-10-31 18:43:00) [9]>>А что в WM_PAINT написано ?
Ничего.
Игорь Шевченко (2004-10-31 18:33:00) [10]
> У меня комбинация WS_POPUP or WS_VISIBLE почему-то дает
> невиди-
> мое окно.
А что в WM_PAINT написано ?