首页 > 代码库 > windows api的学习

windows api的学习

好啦,前段时间疯玩了好久,堕落的这么久也该好好学习学习了,在接触过一大堆程序设计语言后发现还是用C++好了,毕竟看着这名字就舒坦,新手还是老老实实先在windows下开发吧。前段时间开始,照着书上抄了个最初级的"Hello Windows!",当时没想多少,今天学着无聊觉得还是带着上次写的一起写到网上来吧,以后回过头来也许还会来笑笑自己当初原来会是如此傻,好了不多说,今天姑且在原来的基础上加了一点点新东西,好吧,也就是那么一点点,下面当然就是上代码咯。

 1 #include <windows.h> 2  3 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 4  5 /*关于WinMain的各个参数的意义 6 hInstance:应用程序当前实例的句柄 7 hPrevhInstance:应用程序先前实例的句柄,对于同一个程序打开两次,出现两个窗口第一次打开的 8 窗口就是先前实例的窗口 9 szCmdLine:指向应用程序命令行的字符串的指针,不包括执行文件名10 iCmdShow:指明窗口应该如何显示11 */12 int WINAPI WinMain(HINSTANCE hInstance,13                    HINSTANCE hPrevhInstance,14                    PSTR szCmdLine,15                    int iCmdShow)16                    {17                        static TCHAR szAppName[] = TEXT("HelloWin");18                        HWND mainHwnd;19                        MSG msg;20                        WNDCLASSEX wndclass;21 22                        wndclass.style = CS_HREDRAW|CS_VREDRAW; //从这个窗口类派生的窗口具有的风格23                        wndclass.lpfnWndProc = WndProc;         //窗口处理函数的指针24                        wndclass.cbClsExtra = 0;                //指定紧跟在窗口类结构后的附加字节数25                        wndclass.cbWndExtra = 0;                //指定紧跟在窗口实例的附加字节数,如果一个应用程序在资源中用CLASS伪指令注册一个对话框类时,则必须把这个成员设成DLGWINDOWEXTRA。26                        wndclass.cbSize = sizeof(WNDCLASSEX);   //WNDCLASSEX的大小27                        wndclass.hInstance = hInstance;         //本模块额实例句柄28                        wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //图标的句柄29                        wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION);//和窗口类关联的小图标,如果该值为NULL,则把hIcon中的图标转换为合适大小30                        wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);   //光标的句柄31                        wndclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;//背景花耍的句柄32                        wndclass.lpszMenuName = NULL;                    //指向菜单的指针33                        wndclass.lpszClassName = szAppName;              //指向类名称的指针34 35                        if(!RegisterClassEx(&wndclass))36                        {37                            MessageBox(NULL,"error","title",MB_OK);38                            return 0;39                        }40 41                        mainHwnd = CreateWindowEx(0,                        //窗口的扩展风格42                                                  szAppName,                //指向注册类名的指针43                                                  "Hello Windows",          //指向窗口名称的指针44                                                  WS_OVERLAPPEDWINDOW,      //窗口风格45                                                  CW_USEDEFAULT,CW_USEDEFAULT,//窗口的位置(x,y)46                                                  CW_USEDEFAULT,CW_USEDEFAULT,//窗口的大小(x,y)47                                                  HWND_DESKTOP,               //父窗口的句柄48                                                  NULL,                       //菜单的句柄或是子窗口的标识符49                                                  NULL,                       //应用程序实例的句柄50                                                  NULL);                      //指向窗口的创建数据51                         ShowWindow(mainHwnd,iCmdShow);52 53                         while(GetMessage(&msg,NULL,0,0))54                         {55                             TranslateMessage(&msg);56                             DispatchMessage(&msg);57                         }58                         return msg.wParam;59                    }60 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)//hwnd是接受消息的窗口句柄,UINT则是接受的消息,WPARAM以及LPARAM是附加在message上的数据61 {62     HDC hdc;63     PAINTSTRUCT ps;64     RECT rect;65 66     static HWND hBtn;67 68     switch(message)69     {70         case WM_COMMAND:       //这里的WM_COMMAND消息是由子窗口控件产生的,会产生相应的信息,比如窗口菜单会产生
71 MessageBox(NULL,"按下了按钮!","按钮响应",MB_OK);//LOWORD(wParam):菜单ID,HIWORD(wParam):0(此处为通知码),lParam:0若消息来源于菜单则为0,反之为1
72         case WM_CREATE:
73 hBtn = CreateWindowEx(0,
74 TEXT("BUTTON"),
75 TEXT("按钮"),
76 WS_CHILD|WS_VISIBLE,
77 200,150,
78 100,40,
79 hwnd,
80 NULL,
81 NULL,
82 NULL);
83 return 0;
84 case WM_PAINT:
85 hdc = BeginPaint(hwnd,&ps);
86 GetClientRect(hwnd,&rect);
87 DrawText(hdc,TEXT("Hello Windows!"),-1,&rect,//DrawText为输出格式化的正文
88 DT_CENTER|DT_SINGLELINE|DT_VCENTER);//hdc:设备描述表句柄,TEXT("")显示内容,-1:字符串的长度,若为-1,则字符串被认定是以‘/0‘结尾,自动计算长度
89 EndPaint(hwnd,&ps);          //rect:指向举行结构的指针,最后一大串是正文的绘制选项
90 return 0;                //
91 case WM_DESTROY:
92 PostQuitMessage(0);
93 return 0;
94
95 }
96 return DefWindowProc(hwnd,message,wParam,lParam) //此处处理以上没有处理的消息
97 }

嘛,其实我还是很想能够把那啥按钮弄得好看点来着......不过也算了,一次弄太多了反而容易出bug对吧......

 

里面加了不少注释都是发现有啥忘了的就加上去以后好看的,好吧,我承认看上去有点凌乱.......总之,今天暂时先发上这一篇吧.......

windows api的学习