desktop应用程序也叫窗口程序,我们平时在电脑上安装的APP,都是桌面程序,比如QQ,各种播放器,包括浏览器。桌面程序最主要的特点,就是点击运行之后,会有一个界面,这个界面中的内容都是各个组件拼装起来的。比如文本,按钮,面板等等,也可以自定义组件。
这里介绍如何通过vs2017来开发一个桌面程序。一般安装过vs2017的,都会默认安装了开发桌面程序所需的向导。我们打开vs2017选择新建项目,在新建项目面板 左侧选择Windows Desktop类型,右侧方框中选择Windows Desktop Wizard向导程序。如下图所示:
点击ok,到下一步,选择Windows Application(.exe)类型,并勾选empty project,就是空工程的选项,我们的项目创建出来没有任何代码,需要我们手动敲入代码。
工程创建完毕,我们可以进行编码了,其实如果是入门的话,构建一个桌面程序很简单,我们只需要调用几个方法,并且设置好相关的参数就可以了。 全部代码都可以在一个cpp源文件中完成,这里就叫main.cpp,代码不过100行,需要理解这些代码,我们先来看看关于桌面程序中的一些介绍:
下面给出构建桌面程序的全部代码:main.cpp
#include
#include
#include
#include
static TCHAR szWindowClass[] = _T("win32app");
static TCHAR szWindowTitle[] = _T("firstapp");
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);//设置鼠标样式
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);//设置画刷背景色
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
if (!RegisterClassEx(&wcex)) {
MessageBox(NULL, _T("call to RegisterClassEX failed."), _T("win32"), NULL);
return 1;
}
hInst = hInstance;
HWND hWnd = CreateWindow(
szWindowClass,
szWindowTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
500,
100,
NULL,
NULL,
hInstance,
NULL
);
if (!hWnd) {//创建窗口失败
MessageBox(NULL, _T("call to CreateWindow failed"), _T("win32"), NULL);//调用消息弹出框展示错误消息
return 1;
}
ShowWindow(hWnd, nCmdShow);//显示窗口
UpdateWindow(hWnd);//修改窗口
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);//转换消息
DispatchMessage(&msg);//分发消息
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT ps;//画图结构体
HDC hdc;//绘图上下文句柄
TCHAR hello[] = _T("hello,this is my first app.");
switch (message) {
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 50, 5, hello, wcslen(hello));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return 0;
}
保存程序,并运行,运行截图如下:
运行产生一个窗口,窗口中简单绘制了一个文本内容。 这样,通过vs2017来构建桌面程序就算是入门了,代码理解起来也不是很困难,大多数是在做属性设置。如果前面我们通过向导构建desktop application的时候,不勾选empty project,那么就会有一些默认的代码产生,可以直接运行项目,就能够产生一个默认的窗口。那样适合已经非常熟练的开发,无需从简单的窗口构建开始。