Win32窗口程序实例

转自:http://blog.csdn.net/earbao/article/details/8638348

<pre name="code" class="cpp">#include <windows.h>    
//Win32窗口程序实例    
//声明消息处理函数    
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);    
char szClassName[]="windowsclass";    
char szAppTitle[]="WinApi窗口实例";    
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )    
{    
        
    HWND hMainWnd;//窗口句柄    
    MSG msg;//消息    
    WNDCLASS winclass;//窗口结构体    
    if(!hPrevInstance)    
    {    
        winclass.style=CS_HREDRAW|CS_VREDRAW;//窗口风格    
        winclass.lpfnWndProc=WndProc;//注册消息处理函数    
        winclass.cbWndExtra=0;//附加参数    
        winclass.cbClsExtra=0;//附加参数    
        winclass.hInstance=hInstance;//当前应用程序句柄    
        winclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//加载窗口图标    
        winclass.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口光标    
        winclass.hbrBackground=(HBRUSH)GetStockObject(LTGRAY_BRUSH);//设置窗口背景为浅灰色    
        winclass.lpszMenuName=NULL;//窗口菜单为空    
        winclass.lpszClassName=szClassName;//给窗体结构体命名    
        RegisterClass(&winclass);//注册窗口    
    }    
    hMainWnd=CreateWindow(szClassName,//窗口结构体名称    
        szAppTitle,//窗口标题    
        WS_OVERLAPPEDWINDOW,//窗口风格为可重叠窗口    
        CW_USEDEFAULT,CW_USEDEFAULT,//x,y坐标    
        CW_USEDEFAULT,CW_USEDEFAULT,//窗口的宽度,高度    
        NULL,NULL,hInstance,NULL);    
    ShowWindow(hMainWnd,SW_SHOWNORMAL);//显示窗口    
    UpdateWindow(hMainWnd);//更新窗口,最大化    
    //建立消息循环    
    while(GetMessage(&msg,NULL,0,0))    
    {    
            
        TranslateMessage(&msg); 
		/*函数功能:该函数将虚拟键消息转换为字符消息。字符消息被寄送到调用线程
		的消息队列里,当下一次线程调用函数GetMessage或PeekMessage时被读出
		*/
        DispatchMessage(&msg);
		/*函数功能:该函数分发一个消息给窗口程序。通常消息从GetMessage函数获得。消息被分发到回调函数(过程函数),作用是消息传递给操作系统,然后操作系统
		去调用我们的回调函数,也就是说我们在窗体的过程函数中处理消息。*/
            
    }    
    return msg.wParam;    
}    
LRESULT CALLBACK WndProc(HWND hMainwnd,UINT message,WPARAM wParam,LPARAM lParam)    
{    
    switch(message)    
    {    
            
    case WM_KEYDOWN://键盘按下    
        {    
                
            MessageBox(hMainwnd,"键盘按下了","提示",MB_OK);    
            break;    
        }    
    case WM_LBUTTONDOWN://鼠标按下    
        {    
                
            MessageBox(hMainwnd,"鼠标按下了","提示",MB_OK);    
            break;    
        }    
    case WM_RBUTTONDOWN://鼠标右键按下    
        {    
                
            MessageBox(hMainwnd,"鼠标右键按下了","提示",MB_OK);    
            break;    
        }    
    case WM_DESTROY://关闭窗口    
        {    
                
            MessageBox(hMainwnd,"关闭窗口了","提示",MB_OK);    
            PostQuitMessage(0); 
			/*当点击窗口右上角的关闭时,Windows就会把窗口从系统里删除,这时就会
	发出消息WM_DESTROY给窗口消息处理函数WindowProc,WindowProc收到这条消息后,
	最需要做的一件事情就是调用PostQuitMessage发出退出消息,让消息循环结束。*/
            //exit(0);    
            //ExitProcess(0);    
            break;    
        }    
    default:    
        break;    
    }    
    return DefWindowProc(hMainwnd,message,wParam,lParam);    
        
}   
=============================================================================
// 内容:一个基本的Win32程序框架  
#include <windows.h>  
//#include <windowsx.h>  
//函数声明  
BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );  
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam,LPARAM lParam );  
  
//函数:WinMain() 功能:Win32应用程序入口函数。创建主窗口,处理消息循环  
int PASCAL WinMain( HINSTANCE hInstance, //当前实例句柄  
                   HINSTANCE hPrevInstance, //前一个实例句柄  
                   LPSTR lpCmdLine, //命令行字符  
                   int nCmdShow) //窗口显示方式  
{  
    MSG msg;  
    //创建主窗口  
    if ( !InitWindow( hInstance, nCmdShow ) )  
        return FALSE;  
    //进入消息循环:     
    //从该应用程序的消息队列中检取消息,送到消息处理过程,      
    //当检取到WM_QUIT消息时,退出消息循环。      
    while (GetMessage(&msg, NULL, 0, 0))          
    {                 
        TranslateMessage(&msg);       
        DispatchMessage(&msg);        
    }  
    //程序结束  
    return msg.wParam;  
}  
//函数:InitWindow()  
//功能:创建窗口。  
static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )  
{  
    HWND hwnd; //窗口句柄     
    WNDCLASS wc; //窗口类结构      
    //填充窗口类结构     
    wc.style = CS_VREDRAW | CS_HREDRAW;   
    wc.lpfnWndProc = (WNDPROC)WinProc;    
    wc.cbClsExtra = 0;    
    wc.cbWndExtra = 0;    
    wc.hInstance = hInstance;     
    wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );    
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );   
    wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);    
    wc.lpszMenuName = NULL;   
    wc.lpszClassName = "EasyWin";     
    RegisterClass( &wc );          //注册窗口类    
    hwnd = CreateWindow(        //创建主窗口       
        "EasyWin", //窗口类名称        
        "一个基本的Win32程序", //窗口标题        
        WS_OVERLAPPEDWINDOW, //窗口风格,定义为普通型        
        100, //窗口位置的x坐标       
        100, //窗口位置的y坐标       
        400, //窗口的宽度          
        300, //窗口的高度      
        NULL, //父窗口句柄         
        NULL, //菜单句柄      
        hInstance, //应用程序实例句柄         
        NULL ); //窗口创建数据指针    
    if( !hwnd )  
        return FALSE;     
    //显示并更新窗口     
    ShowWindow( hwnd, nCmdShow );     
    UpdateWindow( hwnd );  
    return TRUE;      
}  
//函数:WinProc()  
//功能:处理主窗口消息  
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam,LPARAM lParam )  
{  
    switch( message )  
    {         
    case WM_KEYDOWN://击键消息        
        switch( wParam )              
        {             
        case VK_ESCAPE:           
            MessageBox(hWnd,"ESC键按下了!","Keyboard",MB_OK);             
            break;            
        }         
        break;        
        case WM_RBUTTONDOWN://鼠标消息            
            {                 
                MessageBox(hWnd,"鼠标右键按下了!","Mouse",MB_OK);                
                break;                
            }             
        case WM_PAINT://窗口重画消息            
            {                 
                char hello[]="你好,我是EasyWin !";                
                HDC hdc;                  
                PAINTSTRUCT ps;           
                hdc=BeginPaint( hWnd,&ps ); //取得设备环境句柄            
                SetTextColor(hdc, RGB(0,0,255)); //设置文字颜色             
                TextOut( hdc, 20, 10, hello, strlen(hello) );//输出文字           
                EndPaint( hWnd, &ps ); //释放资源             
                break;            
            }         
        case WM_DESTROY://退出消息            
            PostQuitMessage( 0 );//调用退出函数             
            break;            
    }  
    //调用缺省消息处理过程      
    return DefWindowProc(hWnd, message, wParam, lParam);      
}  


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值