Показать сообщение отдельно
  #1  
Старый 25.04.2011, 18:53
Javaca Javaca вне форума
Прохожий
 
Регистрация: 25.04.2011
Сообщения: 1
Репутация: 10
Вопрос MDI окно на чистом WinApi

Уважаемые программисты!
Прошу Вас показать работающий Delphi пример MDI окон на чистом WinApi без VCL или помогите пожалуйста исправить мой пример. Хоть тресни, но не хочет у меня создаваться окно "Child_Window".

Код:
Program Api2;

uses
  Windows, Messages;
  
var
 window,window2: TWndClassEx;
 Mwindow: HWND;
 Mmsg: TMsg;
 
function MDIWndProc(Wnd: HWND; uMsg: UINT; lP: LPARAM; wP: WPARAM): LRESULT; stdcall;
begin
  case uMsg of
    WM_CREATE: ;
  else
    Result := DefMDIChildProc(Wnd, uMsg, wP, lP);
  end;
end;

function GetMDIWnd(AParent: HWND; AInst: HMODULE): HWND; stdcall;
begin
   window2.Style := CS_HREDRAW or CS_VREDRAW; //стиль класса главного окна
   window2.hIcon := LoadIcon(Mwindow, IDC_ARROW); //иконка программы
   window2.lpfnWndProc := @MDIWndProc; //назначение обработчика сообщений
   window2.hInstance := HInstance;
   window2.hbrBackground := COLOR_BTNFACE + 1; //цвет окна
   window2.lpszClassName:='Child_Window'; //класс окна
   window2.hCursor := LoadCursor(0, IDC_ARROW); //активный курсор

  if RegisterClassEx(window2) = 0 then MessageBox(AParent, 'Класс Child не зарегистрирован', 'Сообщение', MB_OK);
  
  Mwindow := CreateWindowEx(0, 'Child_Window', 'Child', 
            WS_SYSMENU or WS_CAPTION or WS_CHILD or WS_CLIPCHILDREN or WS_VISIBLE, 
			50, 50, 
			300, 300, 
			0, 0, Mwindow, nil);  
			
	ShowWindow(Mwindow, SW_SHOW);		
 
end;  
 
// Процедура обработки сообщений
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_APPWORKSPACE + 1; //цвет окна
 window.lpszMenuName :=nil;
 window.lpszClassName:='Main_Window';
 RegisterClassEx (window);
 
 // Создание основного окна
 Mwindow:=CreateWindowEx(0,'Main_Window','First_WinAPI_Program',WS_OVERLAPPEDWINDOW or WS_VISIBLE,
CW_USEDEFAULT,SW_SHOWMAXIMIZED,800,600,0,0,Hinstance,nil);

 GetMDIWnd(Mwindow, HInstance);
 
 // Цикл обработки сообщений
 while GetMessage(Mmsg,0,0,0) do
  begin
   TranslateMessage(Mmsg);
   DispatchMessage(Mmsg);
  end;
end.
Ответить с цитированием