Содержание материала

Создание формы и кнопки на чистом API

Code:

program Plain2;

 

uses

Windows,

Messages;

 

const

id_Button = 100;

 

function PlainWinProc (hWnd: THandle; nMsg: UINT;

wParam, lParam: Cardinal): Cardinal; export; stdcall;

var

Rect: TRect;

begin

Result := 0;

case nMsg of

   wm_Create:

     // create button

     CreateWindowEx (0, // extended styles

       'BUTTON', // predefined class

       '&Click here', // caption

       ws_Child or ws_Visible or ws_Border

         or bs_PushButton, // styles

       0, 0, // position: see wm_Size

       200, 80, // size

       hwnd, // parent

       id_Button, // identifier (not a menu handle)

       hInstance, // application id

       nil); // init info pointer

   wm_Size:

   begin

     // get the size of the client window

     GetClientRect (hWnd, Rect);

     // move the button window

     SetWindowPos (

       GetDlgItem (hWnd, id_Button), // button handle

       0, // zOrder

       Rect.Right div 2 - 100,

       Rect.Bottom div 2 - 40,

       0, 0, // new size

       swp_NoZOrder or swp_NoSize);

   end;

   wm_Command:

     // if it comes from the button

     if LoWord (wParam) = id_Button then

       // if it is a click

       if HiWord (wParam) = bn_Clicked then

         MessageBox (hWnd, 'Button Clicked',

           'Plain API 2', MB_OK);

   wm_Destroy:

     PostQuitMessage (0);

   else

     Result := DefWindowProc (hWnd, nMsg, wParam, lParam);

end;

end;

 

procedure WinMain;

var

hWnd: THandle;

Msg: TMsg;

WndClassEx: TWndClassEx;

begin

// initialize the window class structure

WndClassEx.cbSize := sizeOf (TWndClassEx);

WndClassEx.lpszClassName := 'PlainWindow';

WndClassEx.style := cs_VRedraw or cs_HRedraw;

WndClassEx.hInstance := HInstance;

WndClassEx.lpfnWndProc := @PlainWinProc;

WndClassEx.cbClsExtra := 0;

WndClassEx.cbWndExtra := 0;

WndClassEx.hIcon := LoadIcon (hInstance,

   MakeIntResource ('MAINICON'));

WndClassEx.hIconSm  := LoadIcon (hInstance,

   MakeIntResource ('MAINICON'));

WndClassEx.hCursor := LoadCursor (0, idc_Arrow);;

WndClassEx.hbrBackground := GetStockObject (white_Brush);

WndClassEx.lpszMenuName := nil;

// register the class

if RegisterClassEx (WndClassEx) = 0 then

   MessageBox (0, 'Invalid class registration',

     'Plain API', MB_OK)

else

begin

   hWnd := CreateWindowEx (

     ws_Ex_OverlappedWindow, // extended styles

     WndClassEx.lpszClassName, // class name

     'Plain API Demo', // title

     ws_OverlappedWindow, // styles

     cw_UseDefault, 0, // position

     cw_UseDefault, 0, // size

     0, // parent window

     0, // menu

     HInstance, // instance handle

     nil); // initial parameters

   if hWnd = 0 then

     MessageBox (0, 'Window not created',

       'Plain API', MB_OK)

   else

   begin

     ShowWindow (hWnd, sw_ShowNormal);

     while GetMessage (Msg, 0, 0, 0) do

     begin

       TranslateMessage (Msg);

       DispatchMessage (Msg);

     end;

   end;

end;

end;

 

begin

WinMain;

end.

 

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить