Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.15;
Скачать: CL | DM;

Вниз

Создание окна   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2004.08.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.078 c
14-1091176605
Alx2
2004-07-30 12:36
2004.08.15
Кто помнит свои детские заблуждения?


1-1091018462
Sur
2004-07-28 16:41
2004.08.15
Как удалить блок в файле?


8-1086001790
AlexT
2004-05-31 15:09
2004.08.15
Как рограмно сменить разрешение экрана?


4-1088107162
AlexZ
2004-06-24 23:59
2004.08.15
from rsrc to file.


1-1091102938
Andrew
2004-07-29 16:08
2004.08.15
Сохранение файла в Excel