比如把一个大窗口的左边分割成一个小窗口作为目录区,而右边用作内容显示.
;有空的朋友帮我查查错在哪里?本意是创建一个大窗口包涵着一个小窗口
.386 
.model flat,stdcall 
option casemap:none 
include \masm32\include\windows.inc 
include \masm32\include\user32.inc 
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib 
includelib \masm32\lib\kernel32.lib 

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD 
mdi proto

.DATA                     
ClassName db "窗口类",0 
MDIClassName db "子窗口类",0 
MDIClientName  db "MDICLIENT",0     
AppName db "窗口名",0 
MDIAppName db "子窗口名",0 

.DATA?                
hInstance HINSTANCE ?
hwnd  HWND ?      
hwndClient HWND  ? 
hwndFrame HWND  ?
mdicreate MDICREATESTRUCT <> 
CommandLine LPSTR ?
hMainMenu     dd ? 
hChildMenu     dd ? 

.CODE               
start: 
invoke GetModuleHandle, NULL           
mov hInstance,eax 
invoke GetCommandLine                        
mov CommandLine,eax 
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT        
invoke ExitProcess, eax  

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD 
    LOCAL wc:WNDCLASSEX                                           
    LOCAL msg:MSG 
     
 
    mov   wc.cbSize,SIZEOF WNDCLASSEX                  
    mov   wc.style, CS_HREDRAW or CS_VREDRAW 
    mov   wc.lpfnWndProc, OFFSET WndProc 
    mov   wc.cbClsExtra,NULL 
    mov   wc.cbWndExtra,NULL 
    push  hInstance 
    pop   wc.hInstance 
    mov   wc.hbrBackground,COLOR_WINDOW+1 
    mov   wc.lpszMenuName,NULL 
    mov   wc.lpszClassName,OFFSET ClassName 
    invoke LoadIcon,NULL,IDI_APPLICATION 
    mov   wc.hIcon,eax 
    mov   wc.hIconSm,eax 
    invoke LoadCursor,NULL,IDC_ARROW 
    mov   wc.hCursor,eax 
    invoke RegisterClassEx, addr wc 
                     
    invoke CreateWindowEx,NULL,\ 
                ADDR ClassName,\ 
                ADDR AppName,\ 
                WS_OVERLAPPEDWINDOW,\ 
                CW_USEDEFAULT,\ 
                CW_USEDEFAULT,\ 
                CW_USEDEFAULT,\ 
                CW_USEDEFAULT,\ 
                NULL,\ 
                NULL,\ 
                hInst,\ 
                NULL 
    mov   hwnd,eax 
    invoke ShowWindow, hwnd,CmdShow             
    invoke UpdateWindow, hwnd                               

  .while TRUE 
        invoke GetMessage,ADDR msg,NULL,0,0 
        .break .if (!eax) 
        invoke TranslateMDISysAccel,hwndClient,addr msg 
        .if !eax 
            invoke TranslateMessage, ADDR msg 
            invoke DispatchMessage, ADDR msg 
        .endif 
    .endw 
    mov     eax,msg.wParam                                            
    ret 
WinMain endp  
        
WndProc proc uMsg:UINT, wParam:WPARAM, lParam:LPARAM 
 
    .IF uMsg==WM_DESTROY                          
        invoke PostQuitMessage,NULL 
    .ELSEIF uMsg==WM_CREATE 
        invoke mdi  
    .ELSE 
        invoke DefFrameProc, hwnd, hwndClient, uMsg,wParam, lParam
   
        ret 
    .ENDIF 
    xor eax,eax 
    ret 
WndProc endp 

mdi proc    
    LOCAL mwc:WNDCLASSEX 
    LOCAL ClientStruct:CLIENTCREATESTRUCT    
  
    mov mwc.cbSize,SIZEOF WNDCLASSEX 
    mov mwc.style, CS_HREDRAW or CS_VREDRAW 
    mov mwc.lpfnWndProc,offset ChildProc 
    mov mwc.cbClsExtra,NULL 
    mov mwc.cbWndExtra,NULL 
    push hInstance
    pop mwc.hInstance 
    mov mwc.hbrBackground,COLOR_APPWORKSPACE 
    mov mwc.lpszMenuName,NULL
    mov mwc.lpszClassName,offset MDIClassName
    invoke LoadIcon,NULL,IDI_APPLICATION 
    mov mwc.hIcon,eax 
    mov mwc.hIconSm,eax 
    invoke LoadCursor,NULL,IDC_ARROW 
    mov mwc.hCursor,eax    
    invoke RegisterClassEx, addr mwc 
      
        invoke GetMenu,hwnd 
    mov hMainMenu,eax 
    invoke GetSubMenu,hMainMenu,1    
    mov ClientStruct.hWindowMenu,eax 
    mov ClientStruct.idFirstChild,100 
    INVOKE CreateWindowEx,NULL,ADDR MDIClientName,NULL,\ 
            WS_CHILD or WS_VISIBLE or WS_CLIPCHILDREN,CW_USEDEFAULT,\
            CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hwnd,NULL,\ 
            hInstance,addr ClientStruct    
    mov hwndClient,eax 


    invoke CreateMDIWindow,ADDR MDIClassName,ADDR MDIAppName,\ 
            WS_CHILD or WS_VISIBLE or WS_CLIPCHILDREN,10,\    
            10,200,300,hwndClient,\ 
            hInstance,NULL 
    mov hwndFrame,eax    
    invoke ShowWindow,hwndFrame,SW_SHOWNORMAL 
    invoke UpdateWindow,hwndFrame 
    xor eax,eax 
    ret 
mdi endp 

ChildProc Proc uMsg:UINT, wParam:WPARAM, lParam:LPARAM 
invoke DefFrameProc, hwnd, hwndClient, uMsg,wParam, lParam
xor eax,eax 
    ret 
ChildProc endp

end start