Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter