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

Вниз

MDIClient и дочерние окна   Найти похожие ветки 

 
watashi ©   (2006-05-19 14:43) [0]

Проблема в том что дочерние окна не появляются на главном окне, хотя хендлер они получают, у них есть координаты и размеры. Может кто-нибудь знает что не так делаю? Вот код...


program Project1;
uses  Windows, Messages, SysUtils;

{$APPTYPE GUI}
{$R program.res}

var  hMainWnd  : HWND;
    hMDIClientWnd : HWND;
    msgMessage  : TMSG;
    Inst: Cardinal;

const sMainWndClass  = "vxMainWndClass";
     sChildWndClass = "vxChildWndClass";

procedure ShowMessage(Str : PCHAR);
begin
MessageBox(0,Str,"Message",MB_OK);
end;

// main windowprocedure
function MainWndProc(Window: HWnd; AMessage, WParam, LParam: Longint): Longint; stdcall;
var
 AMsg : TMessage;
 CCS  : TClientCreateStruct;
 hChild: HWND;
 Rect: TRect;
 inf:TWindowInfo
begin
AMsg.Msg    := AMessage;
AMsg.WParam := WParam;
AMsg.LParam := LParam;
AMsg.Result := 0;
case AMessage of
 WM_CREATE: begin // creating MDICLIENT
             CCS.hWindowMenu:=GetSubMenu(GetMenu(Window),1);
             CCS.idFirstChild:=2000;
             hMDIClientWnd:=CreateWindow("MDICLIENT",nil,WS_CHILD{ or WS_CLIPCHILDREN or WS_VSCROLL or WS_HSCROLL or WS_VISIBLE},0,0,0,0,Window,0,Inst,@ccs);
             if hMDIClientWnd=0 then
              begin
               MessageBox(0,"#4. "MDI Client" initialization error!","Error",MB_OK);
              end else
              begin
               ShowWindow(hMDIClientWnd, SW_NORMAL);
              end;
            end;
 WM_COMMAND: case LoWord(wParam) of
              1: begin // Creating MDIChild on menu command
                  hChild:=CreateMDIWindow(sChildWndClass,"Child Window",1,10,10,1000,600,hMDIClientWnd,Inst,0);
                  if hChild=0 then
                   begin
                    MessageBox(0,"#5. "Child window" initialization error!","Error",MB_OK);
                   end else
                   begin
                    ShowWindow(hChild, SW_NORMAL);
                   end;
                  GetWindowInfo(hChild,inf);
                  inf.dwExStyle
                  SetWindowText(Window,PChar(IntToStr(Rect.Left)+":"+IntToStr(Rect.Top)));
                 end;
              else Result:=DefFrameProc(Window, hMDIClientWnd, AMessage, wParam, lParam);
             end;
 WM_DESTROY: PostQuitMessage(0);
else
 Result:=DefWindowProc(Window, AMessage, WParam, LParam);
 Exit;
end;
Result := AMsg.Result;
end;

// child windowprocedure
function ChildWndProc(ChildWnd: HWnd; AMessage, WParam, LParam: Longint): Longint; stdcall;
var
 AMsg : TMessage;
 hdcHDC : HDC;
 PaintStruct : TPaintStruct;
 Rect : TRect;
 Col: TColorRef;
begin
AMsg.Msg    := AMessage;
AMsg.WParam := WParam;
AMsg.LParam := LParam;
AMsg.Result := 0;
case AMessage of
 WM_PAINT: begin
            hdcHDC := BeginPaint(ChildWnd,PaintStruct);
            GetClientRect(ChildWnd,Rect);
            EndPaint(ChildWnd,PaintStruct);
           end;
else
 Result:=DefMDIChildProc(ChildWnd, AMessage, WParam, LParam);
 Exit;
end;
Result := AMsg.Result;
end;

// Main window class registering
function MainWndReg(hInst: Cardinal):Boolean;
var MainWndClass: TWndClass;
begin
Result:=True;
with MainWndClass do
 begin
  style         := CS_HREDRAW or CS_VREDRAW;
  lpfnWndProc   := @MainWndProc;
  cbClsExtra    := 0;
  cbWndExtra    := 0;
  hInstance     := hInst;
  hIcon         := LoadIcon(0,IDI_WINLOGO);
  hCursor       := LoadCursor(0,IDC_ARROW);
  hbrBackground := HBRUSH(GetStockObject(GRAY_BRUSH));
  lpszMenuName  := nil;
  lpszClassName := sMainWndClass;
 end;
if RegisterClass(MainWndClass)=0 then Result:=False;
end;

// child window class registering
function ChildWndReg(hInst: Cardinal):Boolean;
var ChildWndClass: TWndClass;
begin
Result:=True;
with ChildWndClass do
 begin
  lpfnWndProc   := @ChildWndProc;
  hInstance     := hInst;
  hCursor       := LoadCursor(0,IDC_ARROW);
  hbrBackground := HBRUSH(GetStockObject(WHITE_BRUSH));
  lpszClassName := sChildWndClass;
 end;
if RegisterClass(ChildWndClass)=0 then Result:=False;
end;

// main window creation & menu load
function InitInstance(hInst:Cardinal):Boolean;
begin
Result:=True;
hMainWnd:=CreateWindow(sMainWndClass,"OS Lab 7",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,0,0,hInstance,nil);
if hMainWnd=0 then
 begin
  Result:=False;
  Exit;
 end;
ShowWindow(hMainWnd, CmdShow);
UpdateWindow(hMainWnd);
SetMenu(hMainWnd,LoadMenu(hInstance,"MYMENU"));
end;

begin
if not MainWndReg(hInstance) then
 begin
  MessageBox(0,"#1. "MainWndClass" not registred due some error!","Error",MB_OK);
  Exit;
 end;

if not ChildWndReg(hInstance) then
 begin
  MessageBox(0,"#2. "ChildWndClass" not registred due some error!","Error",MB_OK);
  Exit;
 end;

if not InitInstance(hInstance) then
 begin
  MessageBox(0,"#3. "MainWnd" initialization error!","Error",MB_OK);
  Exit;
 end;

Inst:=hInstance;

while GetMessage(msgMessage,0,0,0)  do
 begin
  TranslateMessage(msgMessage);
  DispatchMessage(msgMessage);
 end;

Halt(msgMessage.wParam);
end.


 
EDWARDMM ©   (2006-05-31 13:32) [1]

При создании клиента Добавить в dwStyle хатябы WS_THICKFRAME и WS_CAPTION
Можно задать размеры.
hMDIClientWnd:=CreateWindow("MDICLIENT",nil,WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_SYSMENU or WS_CHILDWINDOW or WS_CAPTION  or WS_THICKFRAME,0,0,0,0,Window,0,Inst,@ccs);


 
MaxDAG ©   (2006-05-31 16:14) [2]

Создай hMDIClientWnd, как и hMainWnd, потом выполни SetParent( hMDIClientWnd, hMainWnd);
Дочерняя встроится на территорию hMainWnd.


 
EDWARDMM ©   (2006-05-31 20:05) [3]

Ошибка  вышла!
при создании MDICLIENT нужно указать размеры, в отой области и будет отображатся MDI окна, и с параметрами WS_CHILD or WS_CLIPCHILDREN;



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.163 c
2-1159274945
gosha67
2006-09-26 16:49
2006.10.15
Почему функция возвращает данные, которые ей недоступны


1-1157210797
Ragazor
2006-09-02 19:26
2006.10.15
Как передать из dll хранящиеся там frame-ы?


4-1148978503
sicilla
2006-05-30 12:41
2006.10.15
Не могу запустить файл


6-1148039639
kernel
2006-05-19 15:53
2006.10.15
IP2HostName


4-1149009608
Варяг
2006-05-30 21:20
2006.10.15
Загрузка и отображение картинки