최근 MIS 시스템 인터페이스의 전반적인 프레임 워크를 고려할 때 MDI Form+ 모듈에서 MDI 어린이를 사용하기로 결정했지만 MDI Form의 작업 공간에는 항상 성가신 두꺼운 가장자리가 있습니다.
나는 어제 오후 인터넷에서 C ++ 버전에 대한 해결책을 찾았고, 당신의 참조를 위해 델파이로 번역하기 위해 시간을 보냈습니다.
MDI 양식으로 다음 코드를 작성하십시오.
인터페이스
tfmmain = 클래스 (tform)
...
프로 시저 Formcreate (sender : tobject);
...
사적인
...
절차 createEfwndProc ();
절차 clientWndProc (var 메시지 : tmessage);
끝;
구현
...
절차 tfmmain.createdefwndproc;
var
HWND1 : HWND;
CCS : tclientCreatestruct;
시작하다
ccs.hwindowmenu : = 0;
ccs.idfirstchild : = $ ff00;
hwnd1 : = createwindowex (ws_ex_clientedge,
'mdiclient', '', ws_child 또는 ws_visible 또는 ws_group 또는
ws_tabstop 또는 ws_clipchildren 또는 ws_hscroll 또는 ws_vscroll 또는
ws_clipsiblings 또는 mdis_allchildstyles, 0, 0, clientWidth,
ClientHeight, Handle, 0, Hinstance, @CCS);
fclientinstance : = 포인터 (getwindowlong (hwnd1, gwl_wndproc));
DestroyWindow (HWND1);
끝;
절차 tfmmain.clientwndproc (var 메시지 : tmessage);
// var
// mydc : hdc;
시작하다
if (message.msg = wm_erasebkgnd) 그러면
시작하다
// 여기서 VCL을 시뮬레이션하는 소스 프로그램은 클라이언트 영역을 기본 창의 배경색으로 채 웁니다.
// 클라이언트 영역에 그래픽을 그릴 수도 있습니다.
FillRect (HDC (Message.Wparam), ClientRect, Brush.Handle);
// mydc : = twmerasebkgnd (메시지) .dc;
// bitblt (mydc, (clientWidth- imback.picture.width) div 2,
// (clientHeight -Imback.picture.height) div 2,
// imback.picture.width, imback.picture.height,
// imback.picture.bitmap.canvas.handle, 0, 0, srccopy);
메시지 : result : = 1;
끝
또 다른
message.result : = CallWindowProc (fclientinstance, clientHandle,
message.msg, message.wparam, message.lparam);
끝;
절차 tfmmain.formcreate (sender : tobject);
시작하다
// ********* MDICHILD 두꺼운 경계 제거 *****************
createEfwndProc ();
setwindowlong (clienthandle, gwl_wndproc,
longint (makeobjectinstance (clientwndproc)));
setwindowlong (clienthandle, gwl_exstyle, getwindowlong (
ClientHandle, gwl_exstyle) 및 (ws_ex_clientedge 아님);
setwindowpos (ClientHandle, 0,0,0,0,0, SWP_FRAMECHAND
또는 swp_noactivate 또는 swp_nomove 또는 swp_nosize 또는 swp_nozorder);
// ******************************************* ************
끝;