Форум: "WinAPI";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
ВнизСоздание окна Найти похожие ветки
← →
Proger (2004-07-01 21:02) [0]Что нужно для создания окна и обработки сообщений?
← →
Колбасьев © (2004-07-01 21:45) [1]>> Proger (01.07.04 21:02)
>> Что нужно для создания окна и обработки сообщений?
WindowProc(оконная функция), WinMain(точка входа) и 11 вызовов функций WinAPI.
Да, а еще может кто код накатает? А то я сделал, а у меня не рисуется главное окно.
← →
Колбасьев © (2004-07-01 21:56) [2]Не подскажите, где я ошибся?
Окно не рисуется и программа подвисает (если запустить не из Delphi).
program noform;
uses
Windows, Messages;
//{$R *.res}
const
AppName = "NoForm";
function WindowProc(Window: HWnd; Message, WParam: word;
LParam: LongInt):LongInt; export;
begin
WindowProc := 0;
case Message of
wm_Destroy:
begin
PostQuitMessage(0);
Exit;
end;
end;
WindowProc := DefWindowProc(Window, Message, WParam, LParam);
end;
procedure WinMain;
var
Window: HWnd;
Message: TMsg;
WindowClass: TWndClass;
begin
If HPrevInst = 0 then
begin
WindowClass.style := cs_HRedraw or cs_VRedraw;
WindowClass.lpfnWndProc := @WindowProc;
WindowClass.cbClsExtra := 0;
WindowClass.cbWndExtra := 0;
WindowClass.hInstance := HInstance;
WindowClass.hIcon := LoadIcon(0,idi_Application);
WindowClass.hCursor := LoadCursor(0, idc_Arrow);
WindowClass.hbrBackground := GetStockObject(white_Brush);
WindowClass.lpszMenuName := "";
WindowClass.lpszClassName := AppName;
If not Boolean(RegisterClass(WindowClass)) then
Halt(255);
end;
Window := CreateWindow(AppName, "No_Form", ws_OverlappedWindow, cw_UseDefault, cw_UseDefault,
cw_UseDefault, cw_UseDefault, 0, 0, HInstance, nil);
ShowWindow(Window, CmdShow);
UpdateWindow(Window);
while GetMessage(Message, 0, 0, 0) do
begin
TranslateMessage(Message);
DispatchMessage(Message);
end;
Halt(Message.wParam);
end;
begin
WinMain;
end.
← →
Игорь Шевченко © (2004-07-01 22:22) [3]
> function WindowProc(Window: HWnd; Message, WParam: word;
> LParam: LongInt):LongInt; export;
Пример часом не из Архангелького ?
function WindowProc(Window: HWnd;
Message, WParam: Cardinal;
LParam: Cardinal):LongInt; stdcall;
← →
Колбасьев © (2004-07-01 22:34) [4]Не... из А.Федорова/Д.Рогаткина(1993г.)
← →
Игорь Шевченко © (2004-07-01 22:45) [5]
program WinApi;
uses
Windows, Messages, SysUtils;
{$R *.RES}
function MyCoolWndProc (Window: HWND; Message, WParam: Cardinal;
LParam: Cardinal): Longint; stdcall;
var
ps: PAINTSTRUCT;
DC: HDC;
r: TRect;
begin
case Message of
WM_DESTROY:
begin
PostQuitMessage (0);
Result := 0;
Exit;
end;
WM_PAINT:
begin
dc := BeginPaint (Window, ps);
try
TextOut(DC, 0, 0, "Hello, Windows!", 15);
SetRect (R, 100, 100, 100, 100);
DrawText (DC, "Hello, world!", Length("Hello, world!"), R, DT_CALCRECT);
SetBkColor (DC, GetSysColor(COLOR_BTNFACE));
DrawText (DC, "Hello, world!", Length("Hello, world!"), R,
DT_LEFT OR DT_NOPREFIX);
OffsetRect (R, -1, -1);
Inc( R.Right, 3);
Inc( R.Bottom, 2);
DrawEdge (DC, R, EDGE_ETCHED, BF_RECT);
finally
EndPaint (Window, ps);
end;
end;
end;
Result := DefWindowProc (Window, Message, WParam, LParam);
end;
var
WClass: WNDCLASS;
MyHWND: HWND;
MyMsg: MSG;
begin
WClass.hInstance := HInstance;
WClass.hIcon := 0;
WClass.hCursor := LoadCursor (0, IDC_ARROW);
WClass.hbrBackground := HBRUSH(GetStockObject(WHITE_BRUSH));
WClass.lpfnWndProc := @MyCoolWndProc;
WClass.lpszClassName := "MyCoolClass";
if RegisterClass (WClass) = 0 then begin
RaiseLastWin32Error;
Exit;
end;
//Окно со стилем WS_EX_TOOLWINDOW на таксбаре не появляется...
//Окно со стилем WS_EX_APPWINDOW на таксбаре появляется...
MyHWND := CreateWindowEx (0, "MyCoolClass", "MyCoolWindow",
WS_OVERLAPPEDWINDOW,
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
0, 0, HInstance, nil);
if MyHWND = 0 then begin
RaiseLastWin32Error;
Exit;
end;
ShowWindow (MyHWND, SW_SHOWNORMAL);
{
UpdateWindow (MyHWND); // Это обращение к функции вызывает немедленную посылку
// сообщения WM_PAINT
// Если вызов этой функции закомментировать, то окно
// все равно прорисуется, так как оно большую часть
// находится в режиме ожидания.
}
while GetMessage(MyMsg, 0, 0, 0) do begin
TranslateMessage (MyMsg);
DispatchMessage(MyMsg);
end;
end.
← →
Zz_ (2004-07-02 12:57) [6]Length("Hello, world!") можно в (-1);
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c