好啦,前段时间疯玩了好久,堕落的这么久也该好好学习学习了,在接触过一大堆程序设计语言后发现还是用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对吧......
里面加了不少注释都是发现有啥忘了的就加上去以后好看的,好吧,我承认看上去有点凌乱.......总之,今天暂时先发上这一篇吧.......
原文:http://www.cnblogs.com/futurehacker/p/4109066.html