windows编程笔记(二)HelloWin

来源:互联网 发布:echo php 编辑:程序博客网 时间:2024/05/19 14:36

以上为windows程序的基本结构。

//windows程序的基础代码  #include<windows.h>    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//回调函数声明    int WINAPI WinMain(HINSTANCE hInstance,     // 程序的当前实例句柄                     HINSTANCE hPrevInstance, // 程序的上一个实例句柄 , 在win32程序中 , 它始终是NULL                     PSTR szCmdLine,          // 命令行                     int iCmdShow)            // 窗口显示状态  {      static  TCHAR   szAppName[] = TEXT("HelloWin"); //以'\0'字符结尾的字符串 , 这里是程序的名称(实际用作后面的窗口类的名字)      HWND            hwnd;                           //窗口句柄      MSG             msg;                            //消息结构体      WNDCLASS        wndclass;                       //窗口类            wndclass.style          = CS_HREDRAW | CS_VREDRAW;              //窗口类的风格      wndclass.lpfnWndProc    = WndProc;                              //窗口类绑定的回调函数(也称为窗口过程)      wndclass.cbClsExtra     = 0;                                    //窗口类额外参数(默认为0)      wndclass.cbWndExtra     = 0;//窗口类额外参数(默认为0)       wndclass.hInstance      = hInstance;                            //程序的当前实例句柄 , 绑定到窗口类中      wndclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);      //加载程序图标      wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);          //加载光标      wndclass.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);  //背景刷      wndclass.lpszMenuName   = NULL;                                 //菜单名指针      wndclass.lpszClassName  = szAppName;                            //窗口类的名字            if(!RegisterClass(&wndclass))//注册窗口类      {          MessageBox(NULL, TEXT("This program requires Windows NT!"),              szAppName, MB_ICONERROR);          return 0;      }            //这里创建的是一段内存 , 用于存储创建窗口的信息 , 同时返回该窗口的一个句柄(窗口的标示)      hwnd = CreateWindow(szAppName,                  //窗口类的名字                          TEXT("The Hello Program"),  //窗口名称(标题栏显示的内容)                          WS_OVERLAPPEDWINDOW,        //窗口的风格                          CW_USEDEFAULT,              //窗口x坐标                          CW_USEDEFAULT,              //窗口y坐标                          CW_USEDEFAULT,              //窗口宽度                          CW_USEDEFAULT,              //窗口长度                          NULL,                       //父窗口句柄                          NULL,                       //菜单句柄                          hInstance,                  //程序的当前实例                          NULL);                      //窗口创建数据        /* 程序运行完CreateWindow , 还没运行ShowWindow时 ,      windows向窗口的WndProc发送了第一条消息: WM_Create */        ShowWindow(hwnd, iCmdShow); //显示窗口      UpdateWindow(hwnd);         //更新窗口      /* 运行完UpdateWindow后 , windows向窗口的WndProc     发送了第二条消息: WM_PAINT . 如果ShowWindow没有调用或是调用失败 , WM_PAINT消息是不会发送的*/            //消息循环      while(GetMessage(&msg, NULL, 0, 0))//这里的NULL不能写成hwnd , 否则程序不能正常运行      {          TranslateMessage(&msg);//转换键盘消息          DispatchMessage(&msg);//将消息传送给windows(os) , 由windows来回调      }            return msg.wParam;//结束返回  }    //窗口过程(回调函数)  LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)  {      HDC         hdc;    //设备句柄      PAINTSTRUCT ps;     //包含窗口客户区绘制的信息  是一个结构体      RECT        rect;   //矩形(两个点)            //这里是消息处理      switch(message)      {      //窗口创建消息      case WM_CREATE:        //PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;//播音        return 0 ;        //窗口客户区重绘消息      case WM_PAINT:          PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;//播音          hdc = BeginPaint(hwnd, &ps);//获取设备句柄 , 开始重绘                    GetClientRect(hwnd, &rect);//获取客户区的大小                    DrawText(hdc, TEXT("Hello, Windows 98!"), -1, &rect,                   DT_SINGLELINE | DT_CENTER | DT_VCENTER);//绘制一个字符串            EndPaint(hwnd, &ps);//结束重绘          return 0;        //窗口退出消息      case WM_DESTROY:          PostQuitMessage(0);//发送退出消息          return 0;      }        return DefWindowProc(hwnd, message, wParam, lParam);      //windows对于消息的默认处理      //(注意: 第三个和第四个参数不能传递错误!!!)  }