|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 LinSSun 于 2011-11-25 19:21 编辑
- //该帖子源代码转自
- //VC驿站
- //作者 : 歌帝圣尊
- //转载原因 :很不错!
- //遗憾 : 不能做成视频讲解!
- //版权 : 如有作者有任何问题,请联系此论坛ID删除帖子!
- //菜鸟我甚舍得这么好的帖子没人愿意看,就自作主张的进行一下下文字讲解!如果错误还请指出!
- //其中很多用到的函数不一一细讲了,还靠自己去MSDN, 谷歌百度,
- //下面是作者源代码(不过我加了一些文字讲解!)
- //开始先说一下在VC++6.0中windows32位程序工程的创建!
- //如入门时学时一样,不过我们这次建立的是Win32 Application工程,
- //而不是之前的Win32 Console Application控制台了!
- //然后就是建立c源文件,和入门时用VC++6.0建立是一样的!
- //ok,准备动作到此!
- //我们将来对下面的代码进行讲解!
- //和c程序一样,windows程序也需要包含一些主要的头文件,
- //而 windows.h 就如 stdio.h 一样,里面有很多windows编程要用到的函数的声明定义
- #include<windows.h>
- //全局变量
- //这个先理解为窗口类的一个名字
- TCHAR tWindowClassName[] = TEXT("演示程序");
- //这个为窗口标题的名字
- TCHAR tWindowTitleName[] = TEXT("主窗口标题");
- //窗口过程函数
- //窗口过程函数:说俗一点就是一个对一系列消息处理的函数
- //hWnd:窗口句柄(先不用郁闷窗口句柄是什么,你就当它是用来标识窗口的一个把柄)
- //msg:通俗讲来就是消息,而这个函数就是对消息进行你想处理的处理
- //wParam:应该属于消息附带的一些信息
- //lParam:应该属于消息附带的一些信息
- //(如:当窗口大小发生改变时,它的高位与地位,分别存储这新窗口的宽度,高度)
- LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam , LPARAM lParam);
- //和C程序一样,有程序的入口点
- //hInstance:实例句柄
- //hPrevInstance:现在的windows系统中基本已经不用这个了,默认为NULL
- //lpCmdLine:这个应该是属于命令调用模式才用到和C的main函数里面的参数一样
- //(基础不好就是这样,有些不懂,引以警戒)
- //nCmdShow:说是当用命令调用是窗口的显示方式(最大化,最小化.....)
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pCmdLine, int nCmdShow)
- {
-
- WNDCLASS wnd; //窗口类声明
- HWND hWnd; //窗口句柄变量声明
- MSG msg; //消息结构
-
- //填充窗口类
- wnd.cbClsExtra = 0; //这两个默认为0
- wnd.cbWndExtra = 0; //这两个默认为0(具体有什么别的用处,我也是菜鸟不知道)
-
- //画刷:BLACK_BRUSH为系统定义好的背景画刷(黑色?)
- wnd.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
- //鼠标样式:都有很多定义好的宏供使用
- wnd.hCursor = LoadCursor(NULL, IDC_ARROW);
- //窗口的图标
- wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- //程序的实例句柄(实例句柄和窗口句柄hWnd不一样的)
- wnd.hInstance = hInstance;
- //链接我们定义的窗口过程函数
- wnd.lpfnWndProc = WndProc;
- //窗口类名称,还记得那个全局变量不?
- wnd.lpszClassName = tWindowClassName;
- //如果你这个程序没有菜单,那就为NULL
- wnd.lpszMenuName = NULL;
- //指定样式,这两个宏定义CS_HREDRAW | CS_VREDRAW用异或运算符或起来,
- //表示:当需要重新绘制整个窗口时重绘窗口,
- //当窗口大小发生改变时重绘窗口.....
- wnd.style = CS_HREDRAW | CS_VREDRAW;
- //注册窗口类,当注册不成时!
- if (!RegisterClass(&wnd))
- {
- MessageBox(NULL, TEXT("注册不成功!"), TEXT("系统提示"), 0);
- return 0;
- }
- //创建窗口,他的返回值为窗口的句柄
- hWnd = CreateWindow(
- tWindowClassName, //窗口类名
- tWindowTitleName, //窗口标题名
- WS_OVERLAPPEDWINDOW, //表示:窗口是否带最大化,最小化,......
- 0, //窗口从哪个位置显示(横坐标)
- 0, //窗口从哪个位置显示(纵坐标)
- 400, //窗口的宽度
- 300, //窗口的高度
- NULL, //父窗口的句柄,如果当前窗口为第一个窗口那么为NULL
- NULL, //是否带菜单,如果没有为NULL
- hInstance, //实例句柄
- NULL //如果有父窗口,可能会从父窗口传递消息,如果没有父窗口则为NULL
- );
- //当hWnd为NULL时创建窗口失败
- if(!hWnd)
- return 0;
- //显示并更新窗口
- //这两个函数,自己查去.嘿嘿!
- ShowWindow(hWnd,nCmdShow);
- UpdateWindow(hWnd);
- //设置消息循环
- //这个消息循环比较重要,是应该是windows程序中必须的一部分
-
- //从消息队列中获取消息
- while(GetMessage(&msg, NULL, 0, 0))
- {
- //检查是否有键盘消息,如果有则进行一些处理
- TranslateMessage(&msg);
- //发送消息到窗口过程函数
- DispatchMessage(&msg);
- }
- return msg.lParam;
- }
- //窗口过程函数
- //窗口过程函数:说俗一点就是一个对一系列消息处理的函数
- //hWnd:窗口句柄(先不用郁闷窗口句柄是什么,你就当它是用来标识窗口的一个把柄)
- //msg:通俗讲来就是消息,而这个函数就是对消息进行你想处理的处理
- //wParam:应该属于消息附带的一些信息
- //lParam:应该属于消息附带的一些信息(如:当窗口大小发生改变时,它的高位与地位,分别存储这新窗口的宽度,高度)
- LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam , LPARAM lParam)
- {
- //这里,C语言基础好的就知道是什么了
- //如果msg和下面的选项相等,那就执行其中的语句
- switch(msg)
- {
- //WM_DESTROY消息响应
- //当关闭窗口进行销毁窗口时会发送这么一个消息WM_DESTROY
- case WM_DESTROY:
- {
- //然后咱们自己又给发送一个消息,说"给我Kill掉这个程序对应的进程"
- PostQuitMessage(0);
- return 0;
- }
- //不关心的消息使用缺省处理
- default:
- return DefWindowProc(hWnd, msg, wParam, lParam);
- }
- }
复制代码 效果图:
附件:
1.rar
(10.49 KB, 下载次数: 7)
|
|