Hey,别搞错了Win32项目和Win32控制台程序
2015-09-01 14:55
218 查看
你是否和我一样呢,写了很多控制台程序,特别熟悉cout、main函数等等。
但是你同样也听说过win32 api !!当在你的控制台应用程序中写下某个api函数的时候,你也许会窃喜api函数带来的方便。但是当你编译代码的时候,编译器会无情的通知你“不能识别XX标识符”。
所以,从现在开始我的blog.
你兴致勃勃的打开vs2010,选择“文件”-》“新建”-》“项目”,你会看到如下:
正如你所见到的,有一个win32控制台应用程序,有一个win32项目。有何区别呢?
控制台应用程序运行就是dos的界面
项目一般采用了可视化开发 开发出来的东西就像QQ之类的 是有窗口界面的
win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用程序…
win32项目指运行于32位Windows操作系统中的应用程序…包括win32控制台项目…
win32控制台的入口是main,win32项目的入口是WinMain。而程序的入口点是可以重新设置的。我们可以在console应用程序中设置其入口点为WinMain,反之亦然。在下面的代码中会有所展现!
下面代码是一个Win32项目,通过Win32 API函数来读写.ini文件。
下面是一个完整的Win32项目的代码,其中包括了 WinMain入口点,设计与注册窗口类,创建和显示窗口
更新窗口,消息循环,消息响应
但是你同样也听说过win32 api !!当在你的控制台应用程序中写下某个api函数的时候,你也许会窃喜api函数带来的方便。但是当你编译代码的时候,编译器会无情的通知你“不能识别XX标识符”。
所以,从现在开始我的blog.
你兴致勃勃的打开vs2010,选择“文件”-》“新建”-》“项目”,你会看到如下:
正如你所见到的,有一个win32控制台应用程序,有一个win32项目。有何区别呢?
控制台应用程序运行就是dos的界面
项目一般采用了可视化开发 开发出来的东西就像QQ之类的 是有窗口界面的
win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用程序…
win32项目指运行于32位Windows操作系统中的应用程序…包括win32控制台项目…
win32控制台的入口是main,win32项目的入口是WinMain。而程序的入口点是可以重新设置的。我们可以在console应用程序中设置其入口点为WinMain,反之亦然。在下面的代码中会有所展现!
下面代码是一个Win32项目,通过Win32 API函数来读写.ini文件。
#include<Windows.h> LRESULT CALLBACK WindowProc( _In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam ); int CALLBACK WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd ) { char szResult[255]; char szDefault[255]; char myPath[] = "D:\\myfile.ini"; GetPrivateProfileString("MySection", "MyKey", "555", szResult, 255, myPath); MessageBox(NULL, szResult, NULL, MB_OK); WritePrivateProfileString("MySection", "Mykey", "shit", myPath); GetPrivateProfileString("MySection", "MyKey", "555", szResult, 255, myPath); MessageBox(NULL, szResult, NULL, MB_OK); return 0; }
下面是一个完整的Win32项目的代码,其中包括了 WinMain入口点,设计与注册窗口类,创建和显示窗口
更新窗口,消息循环,消息响应
#include <Windows.h> // 必须要进行前导声明 LRESULT CALLBACK WindowProc( _In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam ); // 程序入口点 int CALLBACK WinMain( _In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow ) { // 类名 WCHAR* cls_Name = L"My Class"; // 设计窗口类 WNDCLASS wc = { }; wc.hbrBackground = (HBRUSH)COLOR_WINDOW; wc.lpfnWndProc = WindowProc; wc.lpszClassName = cls_Name; wc.hInstance = hInstance; // 注册窗口类 RegisterClass(&wc); // 创建窗口 HWND hwnd = CreateWindow( cls_Name, //类名,要和刚才注册的一致 L"我的应用程序", //窗口标题文字 WS_OVERLAPPEDWINDOW, //窗口外观样式 38, //窗口相对于父级的X坐标 20, //窗口相对于父级的Y坐标 480, //窗口的宽度 250, //窗口的高度 NULL, //没有父窗口,为NULL NULL, //没有菜单,为NULL hInstance, //当前应用程序的实例句柄 NULL); //没有附加数据,为NULL if(hwnd == NULL) //检查窗口是否创建成功 return 0; // 显示窗口 ShowWindow(hwnd, SW_SHOW); // 更新窗口 UpdateWindow(hwnd); // 消息循环 MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } // 在WinMain后实现 LRESULT CALLBACK WindowProc( _In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam ) { switch(uMsg) { case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd, uMsg, wParam, lParam); }
相关文章推荐
- 课上十分钟课下1小时
- Document.cookie
- 【leetcode每日一题】237.Delete Node in a Linked List
- MFC之列表框控件ListBox
- Hey,别搞错了Win32项目和Win32控制台程序
- jquery 设置css样式
- Ajax解决缓存的5种方法
- SPOJ 10628 求树上的某条路径上第k小的点
- 华为4X和4C无法使用电信4G的解决办法
- 程序员必备:技术面试准备手册
- 使用Python的requests库作接口测试——响应结果处理
- Linux系统的信号详解
- mysql 自定义函数
- 生成一系列不重复的随机数 及写入文件
- MFC之按钮
- C#多线程的同步与通信
- [转] Finding the Best Programmer's Font
- [freemarker篇]01.入门Freemarker示例
- Gitk
- 8-27 linux 学习(权限管理,正则表达式)