首页 > 代码库 > 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的学习
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。