首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

新手清叫一个子窗口的有关问题,为什么父窗口最大化最小化后,子窗口就不显示了

2013-01-20 
新手清叫一个子窗口的问题,为什么父窗口最大化最小化后,子窗口就不显示了?代码贴在下面了,可以通过编译,但

新手清叫一个子窗口的问题,为什么父窗口最大化最小化后,子窗口就不显示了?
代码贴在下面了,可以通过编译,但是最小化吼就不见了,改变主窗口大小,掩盖的子窗口也得不到恢复。

#include<windows.h>

 HWND hwndchild;
 HWND hwnd;
 char ChildName[]="child";

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

LRESULT CALLBACK ChildWndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,
PSTR szCmdLine,int nCmdShow)

{
static TCHAR szAppName[]=TEXT("Window");



MSG msg;

WNDCLASS wndclass,childclass;

wndclass.style= CS_HREDRAW|CS_VREDRAW;
        
    wndclass.lpfnWndProc=WndProc;
        
    wndclass.cbClsExtra=0;
        
    wndclass.cbWndExtra=0;
        
    wndclass.hInstance=hinstance;
        
    wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
        
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
        
    wndclass.hbrBackground=(HBRUSH)GetStockObject(LTGRAY_BRUSH);
        
    wndclass.lpszMenuName=NULL;
        
    wndclass.lpszClassName=szAppName;
    
    
    childclass.style=CS_HREDRAW|CS_VREDRAW;
    childclass.lpfnWndProc=ChildWndProc;
    childclass.cbClsExtra=0;
    childclass.cbWndExtra=0;
    childclass.hInstance=hinstance;
    childclass.hIcon=NULL;
childclass.hCursor=NULL;
childclass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
childclass.lpszMenuName=NULL;
childclass.lpszClassName=ChildName; 
    
    

if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("Register class faild!"),szAppName,MB_ICONERROR);
return 0;
}

if(!RegisterClass(&childclass))
{
MessageBox(NULL,TEXT("Register childclass faild!"),"ftc",MB_ICONERROR);
return 0;
}

hwnd=CreateWindow(
szAppName,
TEXT("My Program"),
WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
//CW_USEDEFAULT,
10,
10,
600,
800,
//CW_USEDEFAULT,
//CW_USEDEFAULT,
//CW_USEDEFAULT,
NULL,
NULL,
hinstance,
NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;


}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
       
PAINTSTRUCT ps;

RECT rect;
HINSTANCE hInstance;
                  
    switch(message)
        
{
        
case WM_CREATE:
hInstance=((LPCREATESTRUCT)lParam)->hInstance;


hwndchild=CreateWindow(ChildName,"tt",WS_VISIBLE|WS_CHILD,50,50,200,300,hwnd,NULL,hInstance,
NULL);
  
               
            return 0;
           
        case WM_SIZE:
        MoveWindow(hwndchild,50,50,200,300,FALSE); 
            

case WM_PAINT:
        
           
                   return 0;
                
case WM_DESTROY:
        
            PostQuitMessage(0);
        
            return 0;
        
}
        
return DefWindowProc(hwnd,message,wParam,lParam);

}



LRESULT CALLBACK ChildWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{


switch(message)
{
case WM_SIZE:


return 0;

}
 

}
[解决办法]


#include "stdafx.h"
HINSTANCE g_hInst = NULL;
// 父窗口的处理函数
LRESULT CALLBACK WndProc( HWND hWnd,
 UINT nMsg,
 WPARAM wParam,
 LPARAM lParam )
{
switch( nMsg )
{
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg, 
wParam, lParam );
}
//子窗口的处理函数
LRESULT CALLBACK ChildProc( HWND hWnd,
   UINT nMsg,
   WPARAM wParam,
   LPARAM lParam )
{
return DefWindowProc( hWnd, nMsg, 
wParam, lParam );
}
//消息处理函数
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
DispatchMessage( &msg );
}
}
//显示窗口
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
//创建窗口
HWND CreateWnd( LPSTR pszClassName, 
   DWORD nStyle,
   HWND hParent )
{
HWND hWnd = CreateWindowEx( 
0,
pszClassName, 
"MyWnd", 
nStyle,
CW_USEDEFAULT, 
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
hParent,NULL,g_hInst,NULL );
return hWnd;
}
//注册窗口
BOOL RegisterWnd( LPSTR pszClassName, 
 WNDPROC proc,
 int nBrush )
{
WNDCLASSEX wce = { 0 };


wce.cbSize = sizeof( wce );
wce.style = CS_HREDRAW
[解决办法]
CS_VREDRAW;
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.lpfnWndProc = proc;
wce.hIcon = NULL;
wce.hCursor = NULL;
wce.hbrBackground = HBRUSH( nBrush );
wce.hInstance = g_hInst;
wce.lpszClassName = pszClassName;
wce.lpszMenuName = NULL;
wce.hIconSm = NULL;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
} int APIENTRY WinMain(HINSTANCE hInstance,
   HINSTANCE hPrevInstance,
   LPSTR lpCmdLine,
   int nCmdShow)
{
g_hInst = hInstance;
//注册父窗口类
RegisterWnd( "MyWnd", WndProc, 
COLOR_BTNFACE+1 );
//注册子窗口类
RegisterWnd( "Child", ChildProc,
COLOR_WINDOW );
//创建父窗口
HWND hWnd = CreateWnd( "MyWnd", 
WS_OVERLAPPEDWINDOW, NULL );
//创建子窗口
HWND hChild1 = CreateWnd( "Child", 
WS_CHILD
[解决办法]
WS_VISIBLE
[解决办法]
WS_BORDER
[解决办法]

WS_THICKFRAME
[解决办法]
WS_CAPTION
[解决办法]
WS_SYSMENU
[解决办法]

WS_MINIMIZEBOX
[解决办法]
WS_MAXIMIZEBOX, 
hWnd );
HWND hChild2 = CreateWnd( "Child", 
WS_POPUP
[解决办法]
WS_VISIBLE
[解决办法]

WS_THICKFRAME
[解决办法]
WS_CAPTION
[解决办法]
WS_SYSMENU, 
hWnd );
HWND hChild3 = CreateWnd( "Child", 
WS_CHILD
[解决办法]
WS_VISIBLE
[解决办法]
WS_BORDER, 
hWnd );
//移动窗口位置
MoveWindow( hChild1, 100, 100, 
200, 200, TRUE );
MoveWindow( hChild2, 100, 200, 
200, 200, TRUE );
MoveWindow( hChild3, 100, 300, 
200, 200, TRUE );
//显示父窗口
DisplayWnd( hWnd );
Message( );
return 0;
}

热点排行