首页 > Windows开发 > 详细

windows api的学习

时间:2014-11-19 21:44:04      阅读:361      评论:0      收藏:0      [点我收藏+]

好啦,前段时间疯玩了好久,堕落的这么久也该好好学习学习了,在接触过一大堆程序设计语言后发现还是用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的学习

原文:http://www.cnblogs.com/futurehacker/p/4109066.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!