您的位置:首页 > 其它

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文件。

#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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: