Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Окно на WinApi с дополнительной кнопкои?


Автор: WaReZMEN 19.11.2008, 16:13
Хочу окно на WinApi но не простое smile а с дополнительной кнопкои возле "свернуть развернуть закрыть" как ее добавтить и создать ее обработчик?
 smile  

Автор: bems 19.11.2008, 18:03
добавить ее отрисовку в WM_NCPAINT и обработчик в WM_NCLBUTTONDOWN

Автор: WaReZMEN 20.11.2008, 09:45
а примерчик можно а то я не селен в этом деле ...

Автор: WaReZMEN 20.11.2008, 12:08
Вот мой код куда пихать????
Код

Program Api;

uses
  Windows, Messages;

var
 window: TWndClassEx;
 Mwindow: HWND;
 Mmsg: MSG;

function WindowProc(wnd: HWND; msg: integer;  wparam: WPARAM; lparam: LPARAM):LRESULT;STDCALL;
begin
 case msg of
  WM_Destroy:
   begin
    PostQuitMessage(0);
    Result:=0;
    Exit;
   end;
   else
    Result:=DefWindowProc(wnd,msg,wparam,lparam);
 end;
end;


begin
 window.cbSize     :=sizeof (window);
 window.style      :=CS_HREDRAW or CS_VREDRAW;
 window.lpfnWndProc:=@WindowProc;
 window.cbClsExtra :=0;
 window.cbWndExtra :=0;
 window.hInstance  :=HInstance;
 window.hIcon      :=LoadIcon (0,IDI_APPLICATION);
 window.hCursor    :=LoadCursor (0,IDC_ARROW);
 window.hbrBackground:=Color_BtnFace+1;
 window.lpszMenuName :=nil;
 window.lpszClassName:='Main_Window';
 RegisterClassEx (window);
 Mwindow:=CreateWindowEx(0,'Main_Window','First_WinAPI_Program',WS_OVERLAPPEDWINDOW,100,100,300,300,0,0,Hinstance,nil);
 SHOWWINDOW(Mwindow,SW_Show);
 while GetMessage(Mmsg,0,0,0) do
  begin
   TranslateMessage(Mmsg);
   DispatchMessage(Mmsg);
  end;
end.

Автор: Rrader 20.11.2008, 13:46
Стандартных средств для добавления кнопки нет, придется рисовать...Метод брутфорсерский, потому и топорный.  http://www.delphisources.ru/pages/faq/base/btn_on_captionbar.html есть пример, хотя эмуляция не 100%.

Автор: bems 20.11.2008, 17:59
Код

 case msg of
  WM_Destroy:

ну вот здесь обрабатывай WN_NCPAINT. В нем рисуй кнопку на контексте, который возвращает GetWindowDC (не GetDC).
в WM_NCLBUTTONDOWN проверяй попал ли щелчок в твою кнопку. Если попал делай что тебе нужно, если нет вызывай DefWindowProc

Автор: Maks1509 22.11.2008, 22:37
Я давно делал для себя пример реализации. С ошибками конечно при перерисовке, но думаю вполне сгодится. Потом как нужно переделаете.
http://webdrive.avtograd.ru/Download/Explorer/Delphi%20WinApi%20sources/Help%20Button%20Draw.rar

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)