第4章MFC基本应用程序的建立 41 Windows编程基础 4.2编制一个MFC应用程序 43使用 MFC Appwizard 4.4使用 Classwizard 作业
第4章MFC基本应用程序的建立 4.1 Windows编程基础 4.2 编制一个MFC应用程序 4.3 使用MFC AppWizard 4.4 使用ClassWizard 作业
4.1 Windows编程基础 41.1简单的 Windows应用程序 [例 Ex_ HelloMsg]一个简单的 Windows应用程序。 #include <windows. h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox(NULL,"你好,我的 Visual c++世界!","问候",0); return i 运行上述程序需要进行以下步骤: 选择“Fie”New”。单击 Projects,选中Win32 Application项 在 Project Name框中键入项目名称 Ex_ HelloMsg。在 Location下的编辑框中 直接键入文件夹名称,或单击 Browse按钮(…)选择一个已有的文件夹。 单击[OK]。选中 An empty project项。单击[ Finish],单击[OK系统将自动 创建此应用程序 选择“File→>“NeW。单击File标签,在左边的列表框中选择C++ Source File项,在右边的File框中键入 Ex_ HelloMsg cpp,单击[OK]
4.1Windows编程基础 4.1.1简单的Windows应用程序 [例Ex_HelloMsg] 一个简单的Windows应用程序。 #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox (NULL, "你好,我的Visual C++世界!", "问候", 0) ; return 0 ; } 运行上述程序需要进行以下步骤: ➢ 选择“File”→“New”。单击Projects,选中Win32 Application项。 ➢ 在Project Name框中键入项目名称Ex_HelloMsg。在Location下的编辑框中 直接键入文件夹名称,或单击Browse按钮(...)选择一个已有的文件夹。 ➢ 单击[OK]。选中An empty project项。单击[Finish],单击[OK]系统将自动 创建此应用程序。 ➢ 选择“File”→“New”。单击File标签,在左边的列表框中选择C++ Source File项,在右边的File框中键入Ex_HelloMsg.cpp,单击[OK]
4 Windows编程基础 候 输入上面的代码,运行程序,如图 你好,我的 Vi sual c+世界 确定 从程序可以看出: Ex HelloMsg运行结果 传统的DOS程序以man函数作为进入程序的初始入口点,但在 Windows应 用程序中,main函数被 WinMain函数取而代之, Winmain函数的原型如下: int WINAPI Win Main( NSTANCE hinstance∥/当前实例句柄 HINSTANCE hPrevInstance,∥/前一实例句柄 LPSTR lpCmdline ∥/指向命令行参数的指针 nt ncmdshow ∥/窗口的显示状态 句柄是一个标识 Windows资源(如菜单、图标、窗口等)和设备等对象的变量, 或者是一个对操作系统资源的间接引用。 >每一个 Windows应用程序都需要 Windows. h头文件,它还包含了其他的一些 Windows头文件。这些头文件定义了 Windows的所有数据类型、函数调用、 数据结构和符号常量。 MessageBox是一个Win32API( Application Programming Interface,应用程 序接口)函数,用来弹出一个对话框窗口,显示短信息。该函数第一个参数 用来指定父窗口句柄,即对话框所在的窗口句柄。 个参数分别用来 指定显示的消息内容和对话框窗口的标题,最后一个参数用来指定在对话框 中显示的按钮
4.1Windows编程基础 ➢ 输入上面的代码,运行程序,如图。 从程序可以看出 : ➢ 传统的DOS程序以main函数作为进入程序的初始入口点,但在Windows应 用程序中,main函数被WinMain函数取而代之,WinMain函数的原型如下: int WINAPI WinMain ( HINSTANCE hInstance, // 当前实例句柄 HINSTANCE hPrevInstance, // 前一实例句柄 LPSTR lpCmdLine, // 指向命令行参数的指针 int nCmdShow) // 窗口的显示状态 ➢ 句柄是一个标识Windows资源(如菜单、图标、窗口等)和设备等对象的变量, 或者是一个对操作系统资源的间接引用。 ➢ 每一个Windows应用程序都需要Windows.h头文件,它还包含了其他的一些 Windows头文件。这些头文件定义了Windows的所有数据类型、函数调用、 数据结构和符号常量。 ➢ MessageBox是一个Win32 API(Application Programming Interface, 应用程 序接口)函数,用来弹出一个对话框窗口,显示短信息。该函数第一个参数 用来指定父窗口句柄,即对话框所在的窗口句柄。第二、三个参数分别用来 指定显示的消息内容和对话框窗口的标题,最后一个参数用来指定在对话框 中显示的按钮。 图4.1 Ex_HelloMsg运行结果
4 WIndows编程基础 [例 Ex Hellowin]一个完整的 Windows应用程序。 #include <windows.h> LRESULT CALLBACK Wnd Proc(HWND, UINT, WPARAM, LPARAM);∥/窗口过程 nt WiNAPi Win Main(HINSTANCE hInstance, hinSTaNCe hPrevinstance, LPSTR pCmdLine, int nCmdShow) HWND hwnd i ∥/窗口句柄 MSG msg i ∥/消息 WNDCLASS wndclass ∥/窗口类 wndclass style =CS_HREDRAWI CS-VREDRAW i wndclass. IpfnWndProc= WndProc wndclass. cbClsExtra 0 wndclass. cbWndExtra=0i wndclass hInstance= hInstance wndclass hIcon= LoadIcon(NULL, IDI_ APPLICATION); wndclass h Cursor= Load Cursor(NULL, IDC_ARROW)i wndclass hbr Background= (HBRUSH) GetstockObject(WHITE_BRUSH) wndclass. IpszMenuName= NUL wndclass. IpszclassName=“" Hellowin”; ∥/窗口类名 if (!RegisterClass( &wndclass)) /注册窗口 MessageBox(NUL,"窗口注册失败!"," Hellowin",0); return 0
4.1Windows编程基础 [例Ex_HelloWin] 一个完整的Windows应用程序。 #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); // 窗口过程 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd ; // 窗口句柄 MSG msg ; // 消息 WNDCLASS wndclass ; // 窗口类 wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc= WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra= 0 ; wndclass.hInstance= hInstance ; wndclass.hIcon= LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor= LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName= NULL ; wndclass.lpszClassName= “HelloWin”; // 窗口类名 if (!RegisterClass (&wndclass)) // 注册窗口 { MessageBox (NULL, "窗口注册失败!", "HelloWin", 0) ; return 0 ; }
4.1 Windows编程基础 hwnd= CreateWindow( HelloWin ∥/窗口类名 我的窗口" ∥/窗口标题 WS_ OVERLAPPEDWINDOW,∥/窗口样式 CW USEDEFAULT ∥/窗口最初的x位置 CW USEDEFAULT ∥/窗口最初的y位置 CW_ USEDEFAULT ∥/窗口最初的x大小 CW USEDEFAULT ∥/窗口最初的y大小 NULL ∥/父窗口句柄 NULI ∥/窗口菜单句柄 hInstance, ∥/应用程序实例句柄 NULL)i ∥/创建窗口的参数 Show Window(hwnd, nCmdShow)i ∥/显示窗口 UpdateWindow(hwnd) ∥/更新窗口,包括窗口的客户区 ∥/进入消息循环:当从应用程序消息队列中检取的消息是 WM_ QUIT时,则退出循环 while(GetMessage(&msg, NULL, 0, o)) t TranslateMessage( &msg ∥/转换某些键盘消息 DispatchMessage(&msg)i ∥/将消息发送给窗口过程,这里是 Wnd Proc } return msg. wParam
4.1Windows编程基础 hwnd = CreateWindow ("HelloWin", // 窗口类名 "我的窗口", // 窗口标题 WS_OVERLAPPEDWINDOW, // 窗口样式 CW_USEDEFAULT, // 窗口最初的 x 位置 CW_USEDEFAULT, // 窗口最初的 y 位置 CW_USEDEFAULT, // 窗口最初的 x 大小 CW_USEDEFAULT, // 窗口最初的 y 大小 NULL, // 父窗口句柄 NULL, // 窗口菜单句柄 hInstance, // 应用程序实例句柄 NULL) ; // 创建窗口的参数 ShowWindow (hwnd, nCmdShow) ; // 显示窗口 UpdateWindow (hwnd) ; // 更新窗口,包括窗口的客户区 // 进入消息循环:当从应用程序消息队列中检取的消息是WM_QUIT时,则退出循环。 while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; // 转换某些键盘消息 DispatchMessage (&msg) ; // 将消息发送给窗口过程,这里是 WndProc } return msg.wParam ; }