码迷,mamicode.com
首页 > 其他好文 > 详细

01day-pm

时间:2015-03-18 01:09:23      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

三、第一个窗口程序

  3.1、入口函数WinMain

  3.2、窗口处理函数
    当窗口处理消息事件时,系统调用该函数
      LRESULT CALLBACK WindowProc(
                  HWND hwnd, //窗口的句柄
                  UINT uMsg,//消息的ID号
                  WPARAM wParam,//消息所对应的参数
                  LPARAM lParam);//消息所对应的参数

  3.3、注册窗口类型
      typedef struct _WNDCLASS{
                  UINT style; //窗口类的风格
                  WNDPROC lpfnWndProc; //窗口处理函数
                  int cbClsExtra; //窗口类附加数据大小
                  int cbWndExtra; //窗口附加数据大小
                  HANDLE hInstance; //当前应用程序的实例句柄
                  HICON hIcon; //窗口图标
                  HCURSOR hCursor; //窗口的鼠标
                  HBRUSH hbrBackground; //窗口的背景画刷
                  LPCTSTR lpszMenuName; //菜单
                  LPCTSTR lpszClassName; //类型名称
                    }WNDCLASS;

    注册函数 RegisterClass

  3.4、创建窗口
      HWND CreateWindow(
                LPCTSTR lpClassName, //窗口类型名称
                LPCTSTR lpWindowName, //窗口名称
                DWORD dwStyle, //窗口类型
                int x, //窗口的左上角X坐标
                int y, //窗口的左上角Y坐标
                int nWidth, //窗口的宽度
                int nHeight, //窗口的高度
                HWND hWndParent, //父窗口句柄
                HMENU hMenu, //窗口菜单句柄
                HANDLE hlnstance, //应用程序的实例
                LPVOID lpParam); //创建的参数,一般为NULL

  3.5、显示窗口
      ShowWindow 显示窗口
        BOOL ShowWindow(
                HWND hWnd, //显示的窗口句柄
                int nCmdShow);//显示的方式
      UpdateWindow 刷新窗口

  3.6、消息处理
      GetMessage 获取消息
      DispatchMessage 派发消息

  3.7、程序退出
      窗口销毁时,退出程序。在WndProc中实现。
      WM_DESTROY:当窗口销毁时,会调用WndProc传递给使用者。
      PostQuitMessage:发送一个退出消息。

四、资源的处理

  4.1、资源和资源脚本
    资源:ICON/CUSRUR/BITMAP/MENU.....
    资源脚本:扩展名为rc文件。

  4.2、编译资源
    rc.exe编译资源,生成res文件

  4.3、链接资源
    使用link.exe将res文件链接到程序当中。

  4.4、ICON的使用
    LoadIcon从指定程序中加载ICON资源。

    编写一个资源脚本
    新建一个hellowindows.rc文件
    里面写入:
    100 ICON "114.ico"
    然后编译: rc hellowindows.rc
    cl hellowindows.c /c
    link hellowindows.obj hellowindows.res user32.lib
    执行hellowindows,这样可以改变程序外观的图标

    如果改变对话框的图标:
    必须在注册窗口函数里wc.hIcon=LoadIcon(g_hInst,MAKEINTRESOURCE(100));

#include <windows.h>

HINSTANCE g_hInst = NULL;

//2 窗口处理函数
LRESULT CALLBACK WndProc( HWND hWnd, 
                          UINT nMsg, 
                          WPARAM wParam,
                          LPARAM lParam )
{
    //判断消息ID
    switch( nMsg )
    {
    case WM_DESTROY: //窗口销毁的消息
        PostQuitMessage( 0 ); //发送退出消息
        return 0;
    }
    //调用缺省的消息处理程序
    return DefWindowProc( hWnd, nMsg, 
        wParam, lParam );                   
}

//3 注册窗口类型
BOOL MyRegister( LPSTR pszClassName )
{
    WNDCLASS wc = {0};
    ATOM  nAtom = 0;
    //构造注册窗口的参数
    wc.style         = CS_VREDRAW|CS_HREDRAW;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = g_hInst;
    wc.hIcon         = NULL;
    wc.hCursor       = NULL;
    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = pszClassName;
    //注册窗口
    nAtom = RegisterClass( &wc );
    if( 0 == nAtom )
    {
        MessageBox( NULL, "Register Failed",
          "Error", MB_OK|MB_ICONWARNING );
        return FALSE;
    }
    else
    {
        MessageBox( NULL, "Register Successed",
          "Successed", MB_OK );
    }
    return TRUE;
}

//4 窗口创建
HWND MyCreate( LPSTR pszClassName )
{
    HWND hWnd = NULL;
    //创建窗口
    hWnd = CreateWindow( pszClassName, 
            "HelloWnd", WS_OVERLAPPEDWINDOW,
            100, 100, 300, 500, NULL, NULL,
            g_hInst,    NULL );
    if( NULL == hWnd )
    {
        MessageBox( NULL, "CreateWnd Failed", 
          "Error", MB_OK );
        return NULL;
    }
  MessageBox( NULL, "CreateWnd Successed", 
          "Successed", MB_OK );
    return hWnd;
}

//5 显示窗口
void DisplayWnd( HWND hWnd )
{
    //显示
    ShowWindow( hWnd, SW_SHOW );
    //刷新
    UpdateWindow( hWnd );
}
//6 消息处理
void Message( )
{
    MSG msg = { 0 };
    //消息循环处理,获取消息
    while( GetMessage( &msg, NULL, 0, 0 ) )
    {
        //派发消息
        DispatchMessage( &msg );
    }
}
//1 入口函数
int WINAPI WinMain( HINSTANCE hInst,
                    HINSTANCE hPrevInst,
                    LPSTR pszCmdLine,
                    int   nShowCmd )
{
    HWND hWnd = NULL;
    g_hInst = hInst;
    //注册窗口类型
    MyRegister( "MyWnd" );
    //创建注册类型的窗口
    hWnd = MyCreate( "MyWnd" );
    //显示窗口
    DisplayWnd( hWnd );
    //消息处理
    Message( );
    return 0;
}

 

01day-pm

标签:

原文地址:http://www.cnblogs.com/gongyan/p/4346069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!