概述
windows图形界面基础
1.1、 基于SDK的第一个windows图形界面程序
1.1.1 第一个SDK应用程序hello world
1、利用vc6.0创建第一个SDK的windows图形界面应用程序
运行Microsoft Visual C++ 6.0,选择file-->new子菜单,弹出如下窗口:
图1-1 创建SDK应用程序
该对话框有四个选项卡:Files、Projects、workspace以及Othere Documents。
Files与创建文件有关。比如头文件、源文件。
Projects与创建工程有关。
Workspace与创建工作区有关。
Othere Documents 与创建微软的其他文件有关,比如word文档等。
我们选择Projects选项卡,Microsoft Visual C++ 6.0可以创建很多类型的工程,以适应不同的应用需求。其中常用的6种在图中用数字标示出来了。每种创建的工程如下:
①用于创建MFC 动态链接库
②用于创建MFC的应用程序
③用于创建SDK的win32应用程序
④用于创建控制台应用程序
⑤用于创建win32动态链接库(基于SDK的动态链接库 )
⑥用于创建win32的静态链接库(基于SDK的静态链接库 )
我们在学习c语言或c++时,都是创建的控制台应用程序,也就是选择的第4种。现在我们创建一个SDK的win32应用程序,必须选择第三项,也就是图中蓝色的选项。
控制台应用程序和SDK的win32应用程序有什么区别呢?
主要是Microsoft Visual C++ 6.0运行时库调用的入口函数不一样。
控制台应用程序调用的入口函数是:main函数。其函数原型为:
main( int argc, char *argv[ ], char *envp[ ] )。 |
win32应用程序应用程序的入口函数为:WinMain函数。其函数原型为:
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)。 |
一定要注意,如果创建的是控制台应用程序,而主函数使用的是 WinMain函数,编译是会出错的,因为控制台应用程序入口函数都是main函数。(初学者经常会犯这种错误而不自知)。
在Project name 中输入项目名the hello program。
在location文本框中输入项目的路径,或者点击location文本框后面的文件浏览按钮来选择文件路径。点击OK出现如下窗口:
选择单选框的第二项。点Finish。
在新创建的工程中会自动给我们创建一个与工程名相同的.cpp文件。在文件中添加代码。其中加粗的部分为新添加的代码:
#include <windows.h> //1:必须包含头文件windows.h LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; //2:声明窗口过程函数 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) //3:windows应用程序的入口函数 { static TCHAR szAppName[] = TEXT ("HelloWin") ; //4:定义窗口类型名变量 HWND hwnd ; //5:定义窗口句柄 MSG msg ; //6:定义消息结构体对象 WNDCLASS wndclass ; //7:定义要注册的窗口结构体 wndclass.style = CS_HREDRAW | CS_VREDRAW ; //8: 窗口风格 wndclass.lpfnWndProc = WndProc ; //9: 窗口过程函数 wndclass.cbClsExtra = 0 ; //10:该类型窗口的附加内存 wndclass.cbWndExtra = 0 ; //11:窗口对象的附加内存 wndclass.hInstance = hInstance ; //12:窗口的应用程序实例句柄(产生窗口时有操作系统生成) wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; //13:应用程序图标 wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //14:应用程序光标 wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//15:应用程序背景刷 wndclass.lpszMenuName = NULL ; //16:应用程序菜单 wndclass.lpszClassName = szAppName ; //17:窗口类型 if (!RegisterClass (&wndclass)) //18:在操作系统中注册第7~17步中定义的窗口类型 { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, //19:创建窗口,第一个参数为注册时的窗口类型名 TEXT ("The Hello Program"), //20:窗口标题 WS_OVERLAPPEDWINDOW, //21:窗口风格 CW_USEDEFAULT, //22:窗口初始位置x坐标 CW_USEDEFAULT, //23:窗口初始位置y坐标 CW_USEDEFAULT, //24:窗口大小之宽度 CW_USEDEFAULT, //25:窗口大小之高度 NULL, //26:父窗口句柄 NULL, //27:窗口菜单句柄 hInstance, //28:应用程序实例句柄,与第12步中的一样 NULL //29:传递给窗口过程函数的lParam参数指针 ) ; ShowWindow (hwnd, iCmdShow) ; //30:显示窗口 UpdateWindow (hwnd) ; //31:更新窗口 while (GetMessage (&msg, NULL, 0, 0)) //32:消息循环 { TranslateMessage (&msg) ; //33:消息转换 DispatchMessage (&msg) ; //34:分派消息 } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {//35:窗口过程函数,也叫回调函数 HDC hdc ; //36:设备上下文句柄 PAINTSTRUCT ps ; //37:调用BeginPaint获取设备句柄是需要传递的参数 RECT rect ; //38:矩形结构体对象 switch (message) //39:处理消息 { case WM_CREATE: //40:处理WM_CREATE消息 PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ; return 0 ; case WM_PAINT: //41:处理WM_PAINT hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: //42:处理WM_DESTROY PostQuitMessage (0) ; //43:发送一个WM_QUIT消息 return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; //44:调用windows默认的窗口过程函数 } |
编译,运行上述代码,出现如下图形界面::
最后
以上就是烂漫大门为你收集整理的技术小咖之windows图形界面基础windows图形界面基础的全部内容,希望文章能够帮你解决技术小咖之windows图形界面基础windows图形界面基础所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复