VC++MFC编程实例
vs 2019 mfc 实例解析
一、介绍Visual Studio是一个全面的解决方案,它为团队合作提供了一系列现代化工具,用于构建出色的应用程序。
MFC(Microsoft Foundation Class)是一套用于Windows评台的C++类库,它提供了一些可重用的类,用于创建Windows应用程序。
在本文中,我们将对Visual Studio 2019中的MFC实例进行解析,探讨其应用、特性和实现方法。
二、Visual Studio 2019中的MFC实例1. 创建MFC应用程序在Visual Studio 2019中,创建MFC应用程序非常简单。
打开Visual Studio并选择“创建新项目”。
在“创建新项目”对话框中,选择“MFC应用程序”模板,并设置好项目名称和保存位置。
然后按照向导的指导进行下一步操作,选择所需的应用程序类型和功能。
完成向导并在解决方案资源管理器中打开创建的MFC应用程序。
2. MFC视图MFC应用程序中的视图是用户界面的一部分,它展示了应用程序的数据和交互界面。
在Visual Studio 2019中,创建MFC视图非常简单。
在资源管理器中找到“视图”文件夹并右键单击它,选择“添加”->“资源”,在弹出的对话框中选择“新建MFC类”并按照向导创建所需的MFC视图。
在创建MFC视图后,可以通过代码编辑器对其进行进一步的定制和设计。
3. MFC对话框MFC应用程序中的对话框是用户界面的重要组成部分,它提供了与用户进行交互的窗口。
在Visual Studio 2019中,创建MFC对话框同样非常简单。
在资源管理器中找到“对话框”文件夹并右键单击它,选择“添加”->“资源”,在弹出的对话框中选择“新建对话框”并按照向导创建所需的MFC对话框。
通过对对话框的布局和控件进行细致的设计和布局,可以使应用程序界面更加友好和美观。
4. MFC框架MFC应用程序中的框架包括文档、视图和框架窗口三个主要组件。
vc6.0可视化编程实例 -回复
vc6.0可视化编程实例-回复vc6.0可视化编程实例是指在使用Microsoft Visual C++ 6.0编程工具进行可视化编程时的具体案例。
本篇文章将详细介绍vc6.0可视化编程实例的具体步骤和相关知识,以帮助读者更好地理解和应用可视化编程技术。
第一步:创建新项目首先,在vc6.0编程工具中点击“文件”菜单,选择“新建”->“项目”,然后在弹出的对话框中选择“Win32应用程序”作为项目类型。
接下来,填写项目名称、位置和解决方案等相关信息,点击“确定”按钮创建新项目。
第二步:设计界面在vc6.0中,可视化编程使用的是MFC(Microsoft Foundation Class)技术,通过使用控件和对话框设计工具来创建界面。
在解决方案资源视图中找到项目名称,展开后找到“资源文件”文件夹,并双击“资源文件.rc”文件,进入资源编辑器界面。
在资源编辑器中,用户可以通过拖放控件的方式设计界面。
例如,可以从“工具箱”控件面板中选择按钮控件,然后点击对话框中的位置放置按钮控件。
通过设置按钮的大小、位置、文字等属性来调整控件的外观。
在这个例子中,我们将在界面中放置一个按钮控件,用于实现一个简单的点击事件。
第三步:编写代码在界面设计完成后,我们需要为按钮添加点击事件的响应。
点击“类视图”选项卡,在其中找到对应的对话框类,通常以C开头,右键点击该类,选择“添加”->“函数”,并填写函数名称和返回类型等属性。
在弹出的函数编辑对话框中,输入要执行的代码。
例如,我们可以在按钮的点击事件函数中添加一段代码,用于弹出一个消息框显示一条消息。
在这个例子中,我们将添加一段代码,使点击按钮后弹出一个对话框,显示“Hello, world!”的消息。
第四步:编译和运行完成代码编写后,点击“生成”菜单,选择“生成解决方案”,或者直接按下F7键进行编译。
编译成功后,可以在输出窗口中查看编译结果。
接下来,点击“调试”菜单,选择“开始执行”或者按下F5键进行调试运行。
mfc编程cstringlist实例
mfc编程cstringlist实例MFC编程中的CStringList实例在MFC(Microsoft Foundation Classes)编程中,CStringList是一个非常有用的类,用于管理字符串的链表。
它提供了许多方便的功能,使得操作字符串链表变得更加简单和高效。
在本文中,我们将逐步回答关于CStringList的问题,并给出一些实例代码来帮助读者更好地理解和使用这个类。
问题1:什么是CStringList?CStringList是MFC框架中的一个类,它是一个模板类,用于处理字符串的链表。
它使用的是C++的模板机制,可以在链表中存储任意类型的数据。
但在这里,我们主要关注它在处理字符串方面的应用。
问题2:如何创建一个CStringList对象?要创建一个CStringList对象,只需简单地声明一个新的实例即可:CStringList strList;这将创建一个名为strList的CStringList对象。
您可以根据需要创建多个实例,并在程序的任何地方使用它们。
问题3:如何向CStringList中添加字符串?要向CStringList中添加字符串,可以使用AddHead()或AddTail()成员函数。
AddHead()函数将字符串添加到链表的头部,而AddTail()函数则将字符串添加到链表的尾部。
下面是一些示例代码:CStringList strList;strList.AddHead("Hello");strList.AddTail("World");这将创建一个名为strList的CStringList对象,并向其头部添加字符串"Hello",在其尾部添加字符串"World"。
问题4:如何遍历并访问CStringList中的字符串?要遍历并访问CStringList中的字符串,可以使用CstringList的一个迭代器。
VC++ 6.0 API MFC 数独游戏源程序代码
本程序是基于API技术,用VC++ 6.0 MFC开发工具编写的,实现了数独小游戏。
以下为全部源程序代码。
//written by luweikang// shudu.cpp : Defines the entry point for the application.//finished 2010-06-20#include <windows.h>#include "stdafx.h"#include <stdlib.h>#include <stdio.h>#define tPaint 2 //重绘定时器的标识(编号)#define tPaintTime 50 //窗口重绘的时间间隔#define ROW 9 //方格的行数与列数#define COL 9 //方格的行数与列数#define LEN 40 //每个方格大小为40×40像素#define StartY 3 //#define StartX 3 //绘制方格地图时的边界起始位置int CurrentX=0;int CurrentY=0; //当前操作位置void InitMap_show( ); //初始化地图int value[ROW][COL]; //记录每个方格中的数字void Initvalue( ); //初始化方格中的数字为0int judge(); //判断当前位置是否能输入用户想要输入的数字void random(); //实现随机生成整张地图上的数字int change[9][9]; //用于记录各个位置的数字是否可改变,0不可变,1可变void Initchange(); //初始化change数组中的值int IsSuccess(); //判断是否完成int answer[9][9][9]; //用于保存每个方格可以填入的数字void Initanswer(); //初始化answer[81][9][9]全部为0void bauto(int n); //自动求解void showhelp(); //求辅助数据bool help=0; //是否显示辅助数据bool f; //成功标志int tmp=20; //记录当前地图是哪副int easy[21][9][9]={ //用于存储初级地图{{0,0,0,0,3,0,2,0,8},{0,2,8,0,4,0,1,3,0},{0,0,9,5,8,0,0,4,7},{0,3,1,0,2,0,5,9,0},{0,0,5,3,9,1,7,0,0},{0,9,0,4,7,5,8,1,3},{0,0,0,0,6,0,4,0,2},{0,0,0,0,0,3,0,6,0},{0,7,6,2,5,4,0,8,0}},{{0,0,0,0,0,4,0,5,2},{0,0,5,0,0,7,0,1,4},{0,0,1,0,0,8,3,0,6},{0,1,2,0,0,6,4,3,9},{0,0,9,0,4,1,6,8,5},{0,0,6,0,3,5,2,7,1},{0,6,7,0,1,0,0,0,0},{1,5,0,0,0,3,0,2,8},{0,2,0,0,5,9,0,6,0}},{{0,7,8,4,0,0,0,3,6},{4,1,9,0,0,8,2,0,0},{0,0,6,0,7,0,0,0,9},{0,9,5,0,6,4,0,7,1},{1,0,7,5,0,0,0,0,0},{0,8,1,0,0,9,6,2,4},{0,0,2,0,0,0,0,0,3},{0,4,0,0,2,0,0,8,5} },{{0,9,0,0,0,8,0,2,0},{0,8,0,0,9,7,0,4,0},{0,7,0,5,2,0,9,6,8},{0,0,7,0,4,0,0,5,3},{0,2,9,0,3,5,0,0,0},{0,3,5,2,7,1,6,8,0},{0,0,1,0,8,0,5,0,0},{0,0,0,7,0,0,0,9,4},{0,4,8,0,5,2,1,3,6} },{{0,0,5,0,0,0,1,6,7},{0,0,7,0,4,0,0,9,0},{3,0,0,0,0,1,0,0,0},{0,5,1,0,3,0,0,0,0},{0,2,3,0,1,8,5,0,0},{0,8,0,7,9,5,3,0,2},{1,3,6,0,5,0,2,8,0},{0,7,0,1,8,3,0,5,6},{5,9,8,0,6,0,7,0,1} },{{0,1,8,0,0,0,6,2,0},{0,7,9,0,0,0,5,8,0},{0,0,6,0,0,5,0,1,0},{0,5,2,0,3,7,9,0,8},{0,0,1,5,2,8,4,7,3},{0,3,7,0,9,6,0,0,1},{0,0,0,0,7,4,8,3,2},{0,0,0,0,1,0,0,4,5},{0,8,0,0,5,0,0,9,6} },{ //特殊{0,0,1,0,0,0,0,0,7},{0,7,8,5,6,0,3,9,2},{0,0,9,0,4,0,1,6,0},{0,2,3,0,0,5,9,0,6},{0,9,7,3,0,2,0,0,0},{0,4,0,1,2,9,0,7,0},{7,1,0,0,3,8,0,4,9},{0,8,0,0,5,0,0,3,0} },{ //第八种{0,1,2,0,0,9,0,5,8},{0,4,0,0,0,8,6,0,9},{9,0,8,0,5,0,3,1,2},{0,0,1,7,9,5,8,0,0},{0,7,3,0,0,0,0,9,1},{0,0,9,0,3,2,0,0,7},{0,5,7,0,2,4,0,6,3},{0,9,0,0,0,0,0,0,0},{0,0,6,5,7,1,0,8,4} },{{0,3,6,0,0,9,4,8,5},{9,4,0,0,0,8,0,7,0},{0,7,8,0,0,6,0,0,9},{4,6,0,7,8,0,0,9,0},{0,0,7,0,0,3,0,4,0},{0,0,9,0,6,0,7,1,2},{0,5,3,0,9,0,0,6,4},{0,9,4,0,0,0,1,5,0},{0,0,2,6,5,4,0,0,7} },{{0,0,1,8,9,3,5,6,7},{0,8,7,4,0,1,0,3,0},{0,3,9,7,5,0,0,1,0},{4,0,0,0,3,5,0,0,0},{0,0,8,0,0,4,0,9,1},{0,0,2,1,8,6,0,5,0},{0,2,0,5,0,7,0,8,6},{0,6,0,3,2,0,0,0,0},{0,7,0,0,0,8,3,4,0} },{{0,3,9,0,4,8,0,2,5},{6,8,2,0,5,0,0,0,0},{4,5,7,0,2,0,0,8,0},{5,1,6,9,0,3,0,0,4},{9,4,3,0,1,0,0,5,0},{0,2,0,0,0,0,0,6,3},{0,0,0,0,0,0,0,9,2},{0,0,4,2,3,6,0,0,0} },{{0,0,8,0,0,0,0,2,0},{0,3,2,0,4,0,9,0,0},{5,7,4,0,1,2,3,0,8},{0,0,7,0,2,6,0,4,0},{0,0,6,5,0,1,2,7,3},{0,1,5,0,0,0,0,0,9},{0,2,1,7,8,0,0,3,5},{0,4,3,1,0,0,0,0,0},{7,5,0,0,3,4,8,1,0} },{{0,8,0,3,0,0,0,5,9},{0,4,0,0,0,0,6,1,7},{0,5,7,0,1,9,0,3,8},{0,1,8,2,0,0,0,0,3},{0,2,0,0,7,3,8,0,4},{0,0,0,8,9,0,0,2,5},{0,3,2,0,4,5,9,8,0},{0,0,4,0,3,0,5,0,0},{7,6,5,9,8,0,0,0,0} },{{0,0,0,0,8,9,0,5,6},{0,8,6,4,0,5,0,2,9},{0,0,0,0,0,7,0,0,8},{0,1,8,6,4,2,0,9,3},{0,6,3,8,0,1,2,0,0},{0,0,5,0,7,3,0,8,1},{6,0,0,0,3,0,0,4,0},{0,0,7,0,9,4,0,6,2},{0,5,9,0,0,0,0,3,7} },{{0,0,0,2,0,0,0,0,9},{5,2,0,0,0,9,4,0,3},{0,8,9,0,0,0,0,0,0},{0,0,0,9,7,6,0,1,4},{0,9,4,5,2,8,3,7,0},{0,1,3,4,5,2,6,0,0},{0,0,2,8,0,1,0,0,7},{0,0,8,6,3,7,2,4,0} },{ //第16种{0,7,9,0,1,4,0,0,6},{0,1,0,0,2,7,0,0,0},{0,0,6,0,8,9,0,1,7},{9,5,0,0,3,2,6,7,0},{0,6,7,4,9,0,0,0,8},{0,3,1,0,6,0,0,0,0},{0,0,5,0,0,1,3,6,2},{0,0,0,8,7,3,5,4,1},{0,0,0,0,5,0,0,8,9} },{{0,0,5,0,6,0,0,0,9},{0,0,0,0,1,8,2,4,5},{8,9,2,3,0,0,0,7,0},{0,5,7,0,8,9,0,0,3},{0,2,1,0,0,6,0,9,0},{0,6,8,0,3,2,0,0,1},{0,8,0,0,2,1,0,6,0},{0,1,4,0,0,0,0,3,7},{0,0,9,8,4,0,5,1,2} },{{0,5,0,0,9,2,1,3,6},{0,0,0,0,5,4,0,0,8},{1,0,0,0,8,3,0,5,9},{0,8,3,9,2,0,0,1,4},{7,0,0,5,0,0,0,8,2},{0,2,0,0,3,0,0,6,0},{9,3,5,2,0,8,7,0,0},{0,6,7,4,1,5,8,0,0},{0,0,0,0,0,0,0,2,5} },{{0,3,7,2,0,9,0,0,4},{0,8,9,0,0,0,1,0,7},{0,5,6,7,1,8,0,0,0},{0,6,0,3,9,0,0,0,0},{0,0,2,0,7,5,0,4,8},{6,4,0,8,0,1,7,0,2},{7,0,3,9,4,6,0,8,1},{0,1,8,0,0,0,0,3,0}},{ //第20种{0,3,5,0,0,9,0,2,7},{0,2,9,3,5,1,0,6,8},{0,0,0,0,0,4,0,0,9},{0,5,0,5,6,0,0,0,3},{8,7,0,5,0,3,0,0,2},{0,4,0,0,0,2,0,0,5},{6,0,4,0,3,7,2,0,0},{0,1,3,9,2,0,8,7,4},{0,0,0,0,0,5,0,9,6}},{ //测试数据{7,1,2,3,6,9,4,5,8},{3,4,5,2,1,8,6,7,9},{9,6,8,4,5,7,3,1,2},{4,2,1,7,9,5,8,3,6},{5,7,3,8,4,6,2,9,1},{6,8,9,1,3,2,5,4,7},{8,5,7,9,2,4,1,6,3},{1,9,4,6,8,3,7,2,5},{2,3,6,5,7,1,0,8,4}}};LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); //窗口处理函数int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow){// written by luweikang// TODO: Place code here.static TCHAR szAppName[ ] = TEXT ("Russion");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 = szAppName;if( !RegisterClass( &wndclass ) ){MessageBox( NULL, TEXT ("Program requires Windows NT!" ),szAppName, MB_ICONERROR );return 0;}hwnd = CreateWindow( szAppName, TEXT ("数独游戏"),WS_OVERLAPPED | WS_SYSMENU | WS_BORDER,CW_USEDEFAULT, CW_USEDEFAULT,(COL + 4) * LEN+2, //窗口宽度ROW * LEN + 40, //窗口高度(包括标题栏部分29pix)NULL, NULL, hInstance, NULL );ShowWindow( hwnd, iCmdShow );UpdateWindow( hwnd );while( GetMessage( &msg, NULL, 0, 0 ) ){TranslateMessage( &msg );DispatchMessage( &msg );}return msg.wParam;}void Initvalue( ) //初始化地图上的每一个值,使其为零{int y, x;for( y = 0; y < ROW; y++ ){for( x = 0; x < COL; x++ ){value[y][x] = 0;}}}void Initchange(){int row2,col2;for(row2=0;row2<9;row2++){for(col2=0;col2<9;col2++){if(value[row2][col2]==0) change[row2][col2]=1;else change[row2][col2]=0;}}}void Initanswer(){int a,b,c;for(a=0;a<9;a++){for(b=0;b<9;b++){for(c=0;c<9;c++)answer[a][b][c]=0;}}}int IsSuccess(){int row4,col4;int count[]={81,9,9,9,9,9,9,9,9,9};for(row4=0;row4<9;row4++){for(col4=0;col4<9;col4++){count[value[row4][col4]]--;}}if(count[1]==0&&count[2]==0&&count[3]==0&&count[4]==0&&count[5]==0&&count[6] ==0&&count[7]==0&&count[8]==0&&count[9]==0)return 1;elsereturn 0;}int judge(int value1,int row,int col){int down_row,down_col,up_row,up_col;for(down_row=0;down_row<row;down_row++) //判断方格向上的格子{if(value1==value[down_row][col]) return 0;}for(up_row=8;up_row>row;up_row--) //判断方格向下的格子{if(value1==value[up_row][col]) return 0;}for(down_col=0;down_col<col;down_col++) //判断方格向左的格子{if(value1==value[row][down_col]) return 0;}for(up_col=8;up_col>col;up_col--) //判断方格向右的格子{if(value1==value[row][up_col]) return 0;}int a_row=row/3,b_row=row%3,a_col=col/3,b_col=col%3;//用于记录当前格子所在的小九宫格的位置int mini_row,mini_col;switch(a_row){case 0://这个大九宫格在最上三行switch(a_col){case 0://这个大九宫格在最前三列for(mini_row=0;mini_row<3;mini_row++){for(mini_col=0;mini_col<3;mini_col++)if(value1==value[mini_row][mini_col]) return 0;}break;case 1://这个大九宫格在中间三列for(mini_row=0;mini_row<3;mini_row++){for(mini_col=3;mini_col<6;mini_col++)if(value1==value[mini_row][mini_col]) return 0;}break;case 2://这个大九宫格在最后三列for(mini_row=0;mini_row<3;mini_row++){for(mini_col=6;mini_col<9;mini_col++)if(value1==value[mini_row][mini_col]) return 0;}break;}break;case 1://这个大九宫格在中间三行switch(a_col){case 0://这个大九宫格在最前三列for(mini_row=3;mini_row<6;mini_row++){for(mini_col=0;mini_col<3;mini_col++)if(value1==value[mini_row][mini_col]) return 0;}break;case 1://这个大九宫格在中间三列for(mini_row=3;mini_row<6;mini_row++){for(mini_col=3;mini_col<6;mini_col++)if(value1==value[mini_row][mini_col]) return 0;}break;case 2://这个大九宫格在最后三列for(mini_row=3;mini_row<6;mini_row++){for(mini_col=6;mini_col<9;mini_col++)if(value1==value[mini_row][mini_col]) return 0;}break;}break;case 2://这个大九宫格在最下三行switch(a_col){case 0://这个大九宫格在最前三列for(mini_row=6;mini_row<9;mini_row++){for(mini_col=0;mini_col<3;mini_col++)if(value1==value[mini_row][mini_col]) return 0;}break;case 1://这个大九宫格在中间三列for(mini_row=6;mini_row<9;mini_row++){for(mini_col=3;mini_col<6;mini_col++)if(value1==value[mini_row][mini_col]) return 0;}break;case 2://这个大九宫格在最后三列for(mini_row=6;mini_row<9;mini_row++){for(mini_col=6;mini_col<9;mini_col++)if(value1==value[mini_row][mini_col]) return 0;}break;}break;}return 1;}void showhelp(){Initanswer();int row8,col8,numbe,i;for(row8=0;row8<9;row8++){for(col8=0;col8<9;col8++){if(value[row8][col8]==0&&change[row8][col8]){i=0;for(numbe=1;numbe<10;numbe++){if(judge(numbe,row8,col8)){answer[row8][col8][i++]=numbe;}}}}}}void bauto(int n){int row7=n/9,col7=n%9,num;for(num=1;num<10&&change[row7][col7];num++){if(n<81&&judge(num,row7,col7)&&change[row7][col7]){value[row7][col7]=num;bauto(n+1);}}if(change[row7][col7]&&!f)value[row7][col7]=0;if(n<81&&!change[row7][col7]){bauto(n+1);}if(n==81)f=1;}LRESULT CALLBACK WndProc( HWND hwnd, UINT message, //窗口处理函数WPARAM wParam, LPARAM lParam ){HFONT hfont;HDC hdc, hdcMem;int y, x;PAINTSTRUCT ps;HBITMAP hBitMap;HPEN hPen;HBRUSH hBrush;int row3,col3,mem,mem_fuzhu;static int cxClient, cyClient; //窗口客户区宽度和高度static char *text[]={" ","1","2","3","4","5","6","7","8","9"};static char *info[]={"F1:生成地图","F2:显示辅助数据","F4:自动求解","F5:重开本局"};static char *t="success!";switch( message ){case WM_CREATE:SetTimer( hwnd, tPaint, tPaintTime, NULL );return 0;case WM_SIZE:cxClient = LOWORD( lParam ); //取得窗口客户区宽度和高度cyClient = HIWORD( lParam );return 0;case WM_TIMER:{switch( wParam ){case tPaint: //重绘定时器InvalidateRect(hwnd, NULL, FALSE); //强制重绘窗口工作区break;}}//end of case WM_TIMERcase WM_KEYDOWN:{switch( wParam ){case VK_LEFT: //"向左"方向键if(CurrentX>0)CurrentX-=1;else if(CurrentX==0)CurrentX=8;break;case VK_RIGHT: //"向右"方向键if(CurrentX<8)CurrentX+=1;else if(CurrentX==8)CurrentX=0;break;case VK_UP: //"向上"方向键:if(CurrentY>0)CurrentY-=1;else if(CurrentY==0)CurrentY=8;break;case VK_DOWN: //"向下"方向键:下移一个位置if(CurrentY<8)CurrentY+=1;else if(CurrentY==8)CurrentY=0;break;case 0x30: //响应数字0键value[CurrentY][CurrentX]=0;break;case 0x31:if(!judge(1,CurrentY,CurrentX)) break;value[CurrentY][CurrentX]=1;showhelp();break;case 0x32:if(!judge(2,CurrentY,CurrentX)) break;value[CurrentY][CurrentX]=2;showhelp();break;case 0x33:if(!judge(3,CurrentY,CurrentX)) break;value[CurrentY][CurrentX]=3;showhelp();break;case 0x34:if(!judge(4,CurrentY,CurrentX)) break;value[CurrentY][CurrentX]=4;showhelp();break;case 0x35:if(!judge(5,CurrentY,CurrentX)) break;value[CurrentY][CurrentX]=5;showhelp();break;case 0x36:if(!judge(6,CurrentY,CurrentX)) break;value[CurrentY][CurrentX]=6;showhelp();break;case 0x37:if(!judge(7,CurrentY,CurrentX)) break;value[CurrentY][CurrentX]=7;showhelp();break;case 0x38:if(!judge(8,CurrentY,CurrentX)) break;value[CurrentY][CurrentX]=8;showhelp();break;case 0x39:if(!judge(9,CurrentY,CurrentX)) break;value[CurrentY][CurrentX]=9;showhelp();break;case VK_F1:f=0;help=0;mem_fuzhu=10000;while(1){mem=rand()%20;if(mem_fuzhu!=mem)break;}tmp=mem;mem_fuzhu=mem;for(row3=0;row3<9;row3++){for(col3=0;col3<9;col3++)value[row3][col3]=easy[mem][row3][col3];}Initchange();break;case VK_F2:Initanswer();showhelp();help=!help;break;case VK_F4:bauto(0);break;case VK_F5:help=0;for(row3=0;row3<9;row3++){for(col3=0;col3<9;col3++)value[row3][col3]=easy[tmp][row3][col3];}f=0;}}//end of case WM_KEYDOWNbreak;case WM_PAINT: //重绘窗口工作区{hdc = BeginPaint( hwnd, &ps );hdcMem = CreateCompatibleDC( hdc );hBitMap = CreateCompatibleBitmap( hdc, cxClient, cyClient );SelectObject( hdcMem, hBitMap );//画地图最外面的白色矩形Rectangle( hdcMem, StartX,StartY,StartX + LEN * COL, StartY + LEN *ROW );Rectangle( hdcMem, StartX + LEN * COL+ 3, StartY , StartX + LEN * COL + 149, StartY + LEN * ROW); //画右边的白色文本区域///*hPen = CreatePen( PS_SOLID, 1, RGB(180, 180, 180) );SelectObject( hdcMem, hPen );hBrush = CreateSolidBrush( RGB(250, 250, 250) );SelectObject( hdcMem, hBrush );for( y = 0; y < ROW ; y++ ) //画地图中的每一格{for( x = 0; x < COL ; x++ ){Rectangle( hdcMem, StartX + LEN * x, StartY + LEN * y,StartX + LEN * (x + 1), StartY + LEN * (y + 1) );}}hPen = CreatePen( PS_SOLID, 1, RGB(255, 0, 0) );SelectObject( hdcMem, hPen );Rectangle( hdcMem, StartX + 119, StartY ,StartX + 121, StartY + 360); //横竖各两条画红线Rectangle( hdcMem, StartX + 239, StartY ,StartX + 241, StartY + 360);Rectangle( hdcMem, StartX , StartY + 119,StartX + 360, StartY + 121);Rectangle( hdcMem, StartX , StartY + 239,StartX + 360, StartY + 241);DeleteObject( hPen );DeleteObject( hBrush );//画能移动的当前活动的蓝色方格hPen = CreatePen( PS_SOLID, 1, RGB(0, 0, 255) );SelectObject( hdcMem, hPen );hBrush = CreateSolidBrush( RGB(255, 255, 255) );SelectObject(hdcMem, hBrush);Rectangle( hdcMem, StartX + LEN * CurrentX, StartY + LEN * CurrentY,StartX +LEN * (CurrentX + 1), StartY + LEN * (CurrentY + 1) );Rectangle( hdcMem, StartX + LEN * CurrentX+1, StartY + LEN * CurrentY+1,StartX +LEN * (CurrentX + 1)-1, StartY + LEN * (CurrentY + 1)-1 );DeleteObject( hPen );DeleteObject( hBrush );DeleteObject( hBitMap );hfont=CreateFont(35,0,0,0,FW_HEA VY,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"粗体字");SelectObject(hdcMem,hfont);for(int ro=0;ro<9;ro++){for(int co=0;co<9;co++){if(change[ro][co]==0){SetTextColor(hdcMem,RGB(0,0,0)); //设置文本颜色为黑色TextOut(hdcMem,StartX+3+LEN*co,StartY+3+LEN*ro,text[value[ro][co]],strlen(text[value [ro][co]]));}if(change[ro][co]==1){SetTextColor(hdcMem,RGB(255,0 ,0)); //设置文本颜色为红色TextOut(hdcMem,StartX+3+LEN*co,StartY+3+LEN*ro,text[value[ro][co]],strlen(text[value [ro][co]]));}}}if(help){hfont=CreateFont(13,0,0,0,FW_HEA VY,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"粗体字");SelectObject(hdcMem,hfont);SetTextColor(hdcMem,RGB(128,128 ,128));for(int ro=0;ro<9;ro++){for(int co=0;co<9;co++){for(intnumb=0;numb<9&&change[ro][co]&&value[ro][co]==0;numb++){for(int a=numb/3;a<3;a++){for(int b=numb%3;b<3;b++){TextOut(hdcMem,StartX+3+LEN*co+b*11,StartY+3+LEN*ro+a*11,text[answer[ro][co][nu mb]],strlen(text[answer[ro][co][numb]]));}}}}}}hfont=CreateFont(15,0,0,0,FW_HEA VY,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"粗体字");SelectObject(hdcMem,hfont);SetTextColor(hdcMem,RGB(0,0,0)); //设置文本颜色为黑色TextOut(hdcMem,StartX + LEN * 9+4, StartY+1,info[0],strlen(info[0]));TextOut(hdcMem,StartX + LEN * 9+4, StartY+21,info[1],strlen(info[1]));TextOut(hdcMem,StartX + LEN * 9+4, StartY+41,info[2],strlen(info[2]));TextOut(hdcMem,StartX + LEN * 9+4, StartY+61,info[3],strlen(info[3]));if(IsSuccess()){hfont=CreateFont(30,0,0,0,FW_HEA VY,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"粗体字");SelectObject(hdcMem,hfont);TextOut(hdcMem,StartX+364,StartY+300,t,strlen(t));}BitBlt( hdc, 0, 0, cxClient, cyClient, hdcMem, 0, 0, SRCCOPY );DeleteDC( hdcMem );EndPaint( hwnd, &ps );DeleteObject(hfont);return 0;}//end of case WM_PAINTcase WM_DESTROY:PostQuitMessage( 0 );return 0;}//end of switch( message )return DefWindowProc( hwnd, message, wParam, lParam );}。
c面向对象程序设计MFC简单计算器实验报告
c面向对象程序设计M F C简单计算器实验报告Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#计算机与信息工程学院《程序设计基础》课程设计报告题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东学生学号:专业班级:电子信息工程(1)班指导教师:高攀1 课程设计的题目编写一个能实现简单功能的计算器2 题目要求1. 有一个计算器图形。
2. 能实现加、减、乘、除及乘方的运算。
3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色例如:输入数字1 时,在计算器图形上的1键变为红色。
4. 屏幕、图形颜色、形状自定3 总体设计总体框架图1 系统框架系统功能说明在VC++中绘制计算器界面,各控件的设置对0~9控件设定相应的ID和其他属性:图2 “1”控件设置对“+、-、*、\”控件设定相应的ID和其他属性:图2 “+”控件设置对其它控件设定相应的ID和其他属性:图3 其它控件设置主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。
拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。
4 程序详细设计系统主调模块图5 程序流程图各模块详细设计建立的变量,控件的命名,对应的消息处理函数对应表double poz; 按钮的处理函数void CCalcDlg::OnPt(){point_flag=TRUE; && buffer[i+1]==0)之前那位}m_Dis=strtod(buffer,NULL);整个大的程序的实现分8个功能,每个功能都通过一个相应的函数来实现.在调试时分别进行调试,使得调试更方便些.在编写各个函数只是按着题目要求的去完成,后来经指导老师指导后,发现了很多自己欠缺的地方,又一次将程序整体进行调试.最后把程序完善了许多。
VC++MFC基础教程
dcb.Parity=NOPARITY; //无奇偶校验位 dcb.StopBits=TWOSTOPBITS; //两个停止位 SetCommState(hCom,&dcb);
m_cComm.put_OutBufferSize(512); //设置输出缓冲区 m_cComm.put_Settings(TEXT("9600,n,8,1"));//波特率,无校验,个数
据位,个停止位
if(!m_cComm.get_PortOpen())
{
m_cComm.put_PortOpen(TRUE); //打开串口
B)修改控件属性
修改上面的示例编辑框属性: ID——IDC_EDIT_RECV;
Multiline——True; Want Return——True; Vertical Scroll——True; Auto VScroll——True;
修改下面的示例编辑框属性: ID——IDC_EDIT_SEND; Multiline——True; Vertical Scroll——True;
1.3、API 串口编程
按照步骤一新建 Serial 工程,这里不赘述了。
A)添加 API 串口初始化代码
1、在 SerialDlg.cpp 文件中添加全局变量:
HANDLE hCom; //全局变量,串口句柄 // CSerialDlg 对话框
2、在 SerialDlg.cpp 文件中的 OnInitDialog()函数添加如下代码:
AfxMessageBox("写串口失败!"); }
vc6.0可视化编程实例
vc6.0可视化编程实例VC6.0可视化编程实例目录:1. 引言2. VC6.0可视化编程简介3. 开发环境的搭建4. 实例介绍5. 实例实现步骤5.1 创建新的工程5.2 添加控件和设置属性5.3 编写代码逻辑5.4 编译和调试6. 结论1. 引言VC6.0是一款经典的集成开发环境(IDE),用于开发Windows 平台的应用程序。
其可视化编程能力使开发者能够通过拖拽控件、设置属性和编写代码来快速开发界面丰富的应用程序。
本文将通过一个具体的实例来介绍VC6.0的可视化编程过程。
2. VC6.0可视化编程简介VC6.0的可视化编程是基于MFC(Microsoft Foundation Classes)库实现的。
MFC是一套封装了Windows API的C++类库,它提供了丰富的控件和功能模块,方便开发者进行图形界面的设计和应用逻辑的实现。
VC6.0可视化编程通过拖拽控件和编写事件处理函数,实现应用程序的交互和功能逻辑。
3. 开发环境的搭建要进行VC6.0可视化编程,首先需要安装VC6.0开发环境。
您可以从官网或其他资源下载VC6.0安装文件,并按照安装向导进行安装。
安装完成后,打开VC6.0即可开始编程。
4. 实例介绍为了更好地理解VC6.0可视化编程,我们将以一个简单的实例为例:实现一个窗口应用程序,并在窗口中添加一个按钮。
点击按钮后,将弹出一个对话框显示一条信息。
5. 实例实现步骤5.1 创建新的工程打开VC6.0,在菜单栏中选择"File" > "New" > "Projects",选择"MFC AppWizard(Exe)",并填写相应的项目信息。
点击"OK",VC6.0将自动生成一个新的工程。
5.2 添加控件和设置属性在资源视图中,选择"Dialog"节点,双击它,打开资源编辑器。
VC++6[1].0入门【第三章、MFC编程概述】
第三章 MFC 应用程序概述第3章 MFC 应用程序概述Microsoft Windows 是微软公司推出的一个应用于微机上的具有图形用户界面的多任务和多窗口的操作系统。
Windows 应用程序也称为窗口应用程序,所有的窗口应用程序都有着相同的窗口风格和菜单结构,用户界面友好,方便用户操作。
本章从剖析窗口应用程序的基本结构入手,继而介绍使用MFC 类库开发的应用程序框架结构,并介绍窗口应用程序运行的核心机制-消息映射。
学习了本章,你将对MFC 应用程序框架结构和运行机制有个整体的了解,为后面进入窗口应用程序开发打下良好的基础。
3.1 窗口应用程序概述窗口应用程序的开发一般采用可视化的面向对象的开发,可选择的窗口应用程序开发语言有Visual C++、Visual Basic 、Visual Java 、Dephi 等等。
无论采用哪一种开发语言,首先要了解窗口应用程序的基本机制。
3.1.1 窗口编程基础窗口应用程序运行于Windows 操作系统,Windows操作系统是一个多任务操作系统,因此窗口应用程序的组成,支持技术,基本运行机制等与DOS 应用程序有着本质的区别。
在学习开发窗口应用程序之前,先要对窗口应用程序有一个概念上的了解。
1. 窗口窗口是应用程序与用户进行交互的界面,应用程序通过窗口传递信息给用户,同样用户通过窗口输入数据,发布命令给应用程序。
Windows 界面包含了丰富的标准用户界面元素,包括窗口、图标、菜单、滚动条、对话框、控件和消息框等。
用户使用这些界面元素可以方便的与应用程序进行交互,一个典型的窗口外观如图3-1所示。
垂直滚动条控制菜单栏标题栏菜单栏关闭按钮最小化按钮最大化按钮客户区VC++6简明教程图3-1 Windows应用程序窗口组成在Windows编程中,各种窗口、菜单、按钮、对话框及程序模块等Windows的规范部件是按“对象”来组织的。
为了提高开发窗口应用程序的效率,微软公司为用户提供了大量能创建上述标准元素的API函数和C++类,并且以Windows API函数库和C++类库的形式提供给用户,以充分满足构成应用程序操作界面的需要。
VC6.0制作简易计算器MFC[整理]
1、单击File(文件)菜单,选中New(新建),创建新工程。
2、选择工程栏中MFC AppWizard[exe]应用程序,并命名工程名称为calculator.(如图)3、选择MFC应用程序为“基于对话框”类型,其他选项默认。
单击完成(如图)4、修改界面。
经过前3步骤,VC6.0生成的工作界面如图所示。
先将对话框中的“TODO:在这里设置对话控制”静态文字控件和“确定”按钮控件删除,再使用工具箱将界面拖动控件修改为如图所示的界面。
该图所示是使用工具箱的控件拖放制作的计算器初始界面。
由于这些控件都有默认的名字,所以我们要对控件进行改名,右击Button1按钮,选中Properties(属性)选项以修改控件的属性,如图所示。
在弹出的对话框中,将Button1按钮的Caption(标题)属性修改为“+”,此时初始界面同时变成相应的“+”如下图所示。
修改后的界面如图所示,控件的Caption属性就是控件显示出来的值。
按照前文所讲述的方式,将界面上的按钮控件和静态文本控件的Caption属性都做相应的修改,修改后的界面如图所示。
5、为Edit(编辑)控件添加类的成员变量。
首先,右击Edit控件,选择ClassWizard(建立类向导)选项,如下图所示。
在弹出的对话框中,选择上方MemberVariables选项卡,选中DIC_EDIT1,然后单击单击右侧的Add Variable按钮,如图所示。
单击Add Variable按钮后会跳出,如图所示的对话框,该对话框是设置成员变量的命名和数据类型,在此可以命名为m_data1.注意:控件的ID只是标记一个控件,程序中不能直接控制ID,只能通过修改变量来改变控件的状态。
00相应的,再将另外两个Edit控件命名,本项目就将这3个Edit控件命名为:●IDC_EDIT1:m_data1,类型为double.●IDC_EDIT2:m_data2,类型为double.●IDC_EDIT3:m_result,类型为double.6、添加按钮控件的消息处理函数。
VC MFC中socket编程详解
在网络编程中最常用的方案便是 Client/Server (客户机/服务器)模型.在这种方案中客户应用程序向 服务器程序请求服务.一个服务器程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务器进 程一直处于休眠状态,直到一个客户向这个服务器的地址提出了连接请求.在这个时刻,服务程序被"惊醒" 并且为客户提供服务,即对客户的请求作出适当的反应. 为了方便这种 Client/Server 模型的网络编程,90 年代初由微软联合了其他几家公司共同制定了一套 WINDOWS 下的网络编程接口,即 Windows Sockets 规范,它不是一种网络协议,而是一套开放的、支持多种协 议的 Windows 下的网络编程接口.现在的 Winsock 已经基本上实现了与协议无关,可以使用 Winsock 来调用 多种协议的功能,但较常使用的是 TCP/IP 协议.Socket 实际在计算机中提供了一个通信端口,可以通过这个 端口与任何一个具有 Socket 接口的计算机通信.应用程序在网络上传输,接收的信息都通过这个 Socket 接 口来实现. 微软为 Visual C++定义了 Winsock 类,如 CAsyncSocket 类和派生于 CAsyncSocket 的 CSocket 类,它们 简单易用,可以使用这些类来实现自己的网络程序.但是为了更好的了解 Winsock API 编程技术,这里探讨怎 样使用底层的 API 函数实现简单的 Winsock 网络应用程式设计,分别说明如何在 Server 端和 Client 端操 作 Socket,实现基于 TCP/IP 的数据传送,最后给出相关的代码. 在 VC 中进行 WINSOCK 的 API 编程开发的时候,需要在项目中使用下面的三个文件,否则会出现编译错误. 1. WINSOCK.H: 这是 WINSOCK API 的头文件,需要包含在项目中. 2. WSOCK32.LIB: WINSOCK API 连接库文件.在使用中,一定要把它作为项目的非缺省的连接库包含到 项目文件中去. 3. WINSOCK.DLL: WINSOCK 的动态连接库,位于 WINDOWS 的安装目录 system32 文件夹中.
mfc项目开发实例85个
mfc项目开发实例85个全文共四篇示例,供读者参考第一篇示例:MFC(Microsoft Foundation Classes)是一种面向Windows操作系统开发的图形用户界面应用程序框架,它是微软公司推出的一种软件开发工具,为开发人员提供了一系列类和函数,用于快速、简便地创建Windows应用程序。
在本文中,我们将介绍一些MFC项目开发的实例,希望对MFC开发者有所启发和帮助。
一、MFC项目开发实例之文件操作1. 创建一个MFC项目,实现文件的读取和写入功能。
可以通过CFile类来实现文件的打开、读取、写入和关闭操作。
2. 创建一个MFC项目,实现文件夹的遍历和文件的拷贝功能。
可以使用CFileFind类来查找文件和文件夹,使用CopyFile函数来实现文件的拷贝。
6. 创建一个MFC项目,实现数据库连接和查询功能。
可以使用CDatabase类和CRecordset类来连接数据库和执行SQL查询。
11. 创建一个MFC项目,实现多文档视图窗口的创建和切换功能。
可以通过CMDIChildWnd类和CDocument类来创建多文档视图窗口。
12. 创建一个MFC项目,实现对话框的创建和控件的添加功能。
可以通过CDialog类和CWnd类来创建对话框,使用CButton类、CEdit类和CListCtrl类等控件来添加在对话框中。
13. 创建一个MFC项目,实现菜单和工具栏的添加和事件处理功能。
可以通过CMenu类和CToolBar类来添加菜单和工具栏,使用消息映射来处理菜单和工具栏事件。
14. 创建一个MFC项目,实现状态栏和进度条的显示和更新功能。
可以通过CStatusBar类和CProgressCtrl类来创建状态栏和进度条,使用SetPaneText和SetPos函数来更新状态栏和进度条。
15. 创建一个MFC项目,实现动画和图像显示功能。
可以使用CImageList类和CAnimateCtrl类来实现动画和图像的显示。
VC MFC串口通信编程详解
• lpFileName:将要打开的串口逻辑名,如“COM1”; • dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列; • dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为 0; • lpSecurityAttributes:引用安全性属性结构,缺省值为 NULL; • dwCreationDistribution:创建标志,对串口操作该参数必须置为
在 Win32 下,可以使用两种编程方式实现串口通信,其一是使用 ActiveX 控件,这种 方法程序简单,但欠灵活.其二是调用 Windows 的 API 函数,这种方法可以清楚地掌握 串口通信的机制,并且自由灵活.下面只介绍 API 串口通信部分.
串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作 方式).同步操作时,API 函数会阻塞直到操作完成以后才能返回(在多线程方式中, 虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式,API 函数会立即 返回,操作在后台进行,避免线程的阻塞.
配置串口的示例:
SetupComm(hCom,1024,1024);//输入缓冲区和输出缓冲区的大小都是 1024 COMMTIMEOUTS TimeOuts; //设定读超时 TimeOuts.ReadIntervalTimeout=1000; TimeOuts.ReadTotalTimeoutMultiplier=500; TimeOuts.ReadTotalTimeoutConstant=5000; //设定写超时 TimeOuts.WriteTotalTimeoutMultiplier=500; TimeOuts.WriteTotalTimeoutConstant=2000; SetCommTimeouts(hCom,&TimeOuts);//设置超时 DCB dcb; GetCommState(hCom,&dcb); dcb.BaudRate=9600;//波特率为 9600 dcb.ByteSize=8;//每个字节有 8 位 dcb.Parity=NOPARITY;//无奇偶校验位 dcb.StopBits=TWOSTOPBITS;//两个停止位 SetCommState(hCom,&dcb); PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
VC++课程设计--基于MFC的模拟时钟
VC++课程设计--基于MFC的模拟时钟计科2011级VC++课程设计实验报告题目:基于MFC的模拟时钟班级:计科1104班学号:1108030429姓名:张宝龙日期:2014/1/7课程设计实验报告1、题目:基于MFC的模拟时钟2、编程要点:制作时钟的过程中,首先给时钟创建一个基类CClockElement,还需要派生类CClockBackground,CClockHourHand,CClockMin Hand,CClockSecHand分别控制时钟的背景,时钟的时针,分针,秒针。
3、实现过程:(1)工程、风格、控件与变量表本时钟是基本对话框的时钟,界面简约,便于使用。
控件控件名控件类型Clock 静态文本变量表变量名类型m_crMain COLORREF m_crOther COLORREFm_tmCur CTimem_rcRegion CRectm_nRadius intm_clockBK CClockBackground m_clockHour CClockHourHandm_clockMin CClockMinHandm_clockSec CClockSecHandm_rcClient CRectm_Clock CClockEX(2)主要功能程序代码CClockBackground::CClockBackground() {//为时钟背景定义默认的颜色设置m_crMain=RGB(0,0,255);m_crOther=RGB(0,255,0);}void CClockBackground::Draw(CDC *pDC) {//设置准备环境CPenpenMain(PS_SOLID,1,m_crMain),penOther(PS _SOLID,1,m_crOther);CBrushbrMain(m_crMain),brOther(m_crOther);CPen*pOldPen=pDC->SelectObject(&penOther);CBrush*pOldBrush=pDC->SelectObject(&brMain);CPointptCenter=m_rcRegion.CenterPoint();int nRadius=m_nRadius-8;for(int i=0;i<60;i++){CPoint ptEnd=ptCenter;ptEnd.Offset((int)(nRadius*sin(2*PI*(i% 60)/60)),(int)(-nRadius*cos(2*PI*(i%60)/60)));CRect rcDot(-2,-2,2,2);rcDot.OffsetRect(ptEnd);pDC->Ellipse(rcDot);}//绘制12个小方框,表示12个正点pDC->SelectObject(&penMain);pOldBrush=pDC->SelectObject(&brOth er);for(i=0;i<12;i++){CPoint ptEnd=ptCenter;double fRadian=2*PI*(i%12)/12;ptEnd.Offset((int)(nRadius*sin(fRadian) ),(int)(-nRadius*cos(fRadian)));CRect rcDot(-3,-3,3,3);rcDot.OffsetRect(ptEnd);pDC->Rectangle(rcDot);}//huanyuan设备环境pDC->SelectObject(pOldPen);pDC->SelectObject(pOldBrush);}CClockHourHand::CClockHourHand(){//定义默认颜色m_crMain=RGB(0,0,128);m_crOther=RGB(128,128,0);}void CClockHourHand::Draw(CDC *pDC){//设置准备环境CPenpenMain(PS_SOLID,1,m_crMain),penOthe r(PS_SOLID,1,m_crOther);CBrushbrMain(m_crMain),brOther(m_crOther);CPen*pOldPen=pDC->SelectObject(&penOther );CBrush*pOldBrush=pDC->SelectObject(&brMain);//确定当前指针的弧度intnTime=(m_tmCur.GetHour()%12)*3600;nTime+=m_tmCur.GetMinute()*60;nTime+=m_tmCur.GetSecond();doublefRadian=2*PI*nTime/3600/12;//确定绘制菱形指针所需的四个角的坐标CPoint ptDiamond[4];for(int i=0;i<4;i++){ptDiamond[i]=m_rcRegion.CenterPoin t();}int nRadius=m_nRadius/2;ptDiamond[0].Offset((int)(nRad ius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));fRadian+=0.5*PI;nRadius=m_nRadius/20;ptDiamond[1].Offset((int)(nRad ius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));fRadian+=0.5*PI;nRadius=m_nRadius/10;ptDiamond[2].Offset((int)(nRad ius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));fRadian+=0.5*PI;nRadius=m_nRadius/20;ptDiamond[3].Offset((int)(nRad ius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));//绘制菱形时钟pDC->Polygon(ptDiamond,4);//huanyuan设备环境pDC->SelectObject(pOldPen);pDC->SelectObject(pOldBrush);}CClockMinHand::CClockMinHand(){//定义默认颜色m_crMain=RGB(0,255,100);m_crOther=RGB(128,128,0);}void CClockMinHand::Draw(CDC *pDC){//设置准备环境CPenpenMain(PS_SOLID,1,m_crMain),penOthe r(PS_SOLID,1,m_crOther);CBrushbrMain(m_crMain),brOther(m_crOther);CPen*pOldPen=pDC->SelectObject(&penOther );CBrush*pOldBrush=pDC->SelectObject(&brMain );//确定分针所在位置的弧度intnTime=m_tmCur.GetMinute()*60;nTime+=m_tmCur.GetSecond();double fRadian=2*PI*nTime/3600;//确定绘制菱形指针所需的四个角的坐标CPoint ptDiamond[4];for(int i=0;i<4;i++){ptDiamond[i]=m_rcRegion.CenterPoin t();}int nRadius=m_nRadius/4;ptDiamond[0].Offset((int)(nRad ius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));fRadian+=0.5*PI;nRadius=m_nRadius/20;ptDiamond[1].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));fRadian+=0.5*PI;nRadius=m_nRadius/10;ptDiamond[2].Offset((int)(nRad ius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));fRadian+=0.5*PI;nRadius=m_nRadius/20;ptDiamond[3].Offset((int)(nRad ius*sin(fRadian)),(int)(-nRadius*cos (fRadian)));//绘制菱形时钟pDC->Polygon(ptDiamond,4);//huanyuan设备环境pDC->SelectObject(pOldPen);pDC->SelectObject(pOldBrush);}CClockSecHand::CClockSecHand(){//设定秒针的默认颜色m_crMain=RGB(0,200,200);m_crOther=RGB(0,200,200);}void CClockSecHand::Draw(CDC *pDC){int nTime=m_tmCur.GetSecond();CPointptStart=m_rcRegion.CenterPoint();CPoint ptEnd=ptStart;int nRadius=m_nRadius-10;ptEnd.Offset((int)(nRadius*sin (2*PI*nTime/60)),(int)(-nRadius*cos( 2*PI*nTime/60)));CPenpenMain(PS_SOLID,1,m_crMain);CPen*pOldPen=pDC->SelectObject (&penMain);pDC->MoveTo(ptStart);pDC->LineTo(ptEnd);pDC->SelectObject(pOldPen);}void CClockEX::OnTimer(UINT nIDEvent){Invalidate(FALSE);CStatic::OnTimer(nIDEvent);}void CClockEX::OnSize(UINT nType, int cx, int cy){CStatic::OnSize(nType, cx, cy);GetClientRect(m_rcClient);//获取当前客户区m_clockBK.SetRegion(m_rcClient );m_clockHour.SetRegion(m_rcClie nt);m_clockMin.SetRegion(m_rcClien t);m_clockSec.SetRegion(m_rcClien t);}void CClockEX::OnPaint(){CPaintDC dc(this); // device context for painting//实现双缓冲绘图---防止屏幕闪烁CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmp;bmp.CreateCompatibleBitmap(&dc ,m_rcClient.Width(),m_rcClient.Heigh t());dcMem.SelectObject(&bmp);DrawClock(&dcMem); //绘制时钟dc.BitBlt(0,0,m_rcClient.Width (),m_rcClient.Height(),&dcMem,0,0,SR CCOPY);}voidCClockEX::PreSubclassWindow(){GetClientRect(m_rcClient);//获取当前客户区m_clockBK.SetRegion(m_rcClient );m_clockHour.SetRegion(m_rcClie nt);m_clockMin.SetRegion(m_rcClien t);m_clockSec.SetRegion(m_rcClien t);SetTimer(1,100,NULL);CStatic::PreSubclassWindow();}void CClockEX::DrawClock(CDC *pDC){CTimetmCur=CTime::GetCurrentTime();m_clockBK.SetTime(tmCur);m_clockHour.SetTime(tmCur);m_clockMin.SetTime(tmCur);m_clockSec.SetTime(tmCur);m_clockBK.Draw(pDC);m_clockHour.Draw(pDC);m_clockMin.Draw(pDC);m_clockSec.Draw(pDC);}CClockElement::CClockElement(){m_nRadius=0;m_crMain=RGB(255,0,0);m_crOther=RGB(128,128,0);}voidCClockElement::SetRegion(LPRECT lprcRect){m_rcRegion=lprcRect;m_nRadius=m_rcRegion.Width()/2;if(m_rcRegion.Width()>m_rcRegion.Hei ght()){m_nRadius=m_rcRegion.Height()/2;}}void CClockElement::SetTime(const CTime &tmCur){m_tmCur=tmCur;}voidCClockElement::SetColor(COLORREF crMain,COLORREF crOther){m_crMain=crMain;m_crOther=crOther;}4、运行效果展示:5、自我总结:该小程序是基于MFC中的对话框的,主要针对画笔和画刷的用法,没有涉及连接数据库和算法,完全是为了本学期所学知识的运用,由于时间紧,所以没能深入的探索MFC的奥妙,不过通过本次设计,我对老师课堂上所讲述的关于该类型的知识,有了进一步的了解和掌握,初步的熟悉了画笔和画刷的简单用法,还巩固了MFC类中的基本操作,例如,添加新类,新变量,创建新的对话框,添加控件等方面的知识。
visual c++2010 mfc实例
visual c++2010 mfc实例以下是一个简单的 Visual C++ 2010 MFC 示例,展示了一个基本的对话框应用程序:// SampleMFCAppDlg.h#pragma onceclass CSampleMFCAppDlg : public CDialogEx{public:CSampleMFCAppDlg(CWnd* pParent = nullptr);enum { IDD = IDD_SAMPLEMFCAPP_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX);virtual BOOL OnInitDialog();DECLARE_MESSAGE_MAP()};// SampleMFCAppDlg.cpp#include "SampleMFCApp.h"#include "SampleMFCAppDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endifCSampleMFCAppDlg::CSampleMFCAppDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_SAMPLEMFCAPP_DIALOG, pParent){}void CSampleMFCAppDlg::DoDataExchange(CDataExchange* pDX) {CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CSampleMFCAppDlg, CDialogEx)END_MESSAGE_MAP()BOOL CSampleMFCAppDlg::OnInitDialog(){CDialogEx::OnInitDialog();return TRUE;}// SampleMFCApp.cpp#include "SampleMFCApp.h"#include "SampleMFCAppDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endifCSampleMFCAppApp theApp;BOOL CSampleMFCAppApp::InitInstance(){CWinApp::InitInstance();CSampleMFCAppDlg dlg;空dlg.DoModal();return FALSE;}// SampleMFCApp.rc (资源文件)#include "resource.h"IDD_SAMPLEMFCAPP_DIALOG DIALOGEX 0, 0, 300, 200STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Sample MFC App"FONT 8, "MS Shell Dlg", 0, 0, 0x1BEGINDEFPUSHBUTTON "OK",IDOK,210,10,50,14PUSHBUTTON "Cancel",IDCANCEL,210,30,50,14END// SampleMFCApp.h (头文件)#pragma once#include "afxwin.h"class CSampleMFCAppApp : public CWinApp{public:virtual BOOL InitInstance();};// main.cpp#include "SampleMFCApp.h"#ifdef _DEBUG#define new DEBUG_NEW#endifCSampleMFCAppApp theApp;int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// TODO: 在此处放置代码。
vc++使用MFC操作EXCEL文件
使用MFC操作EXCEL文件本文档适用于:•Microsoft Foundation Classes (MFC), Microsoft Visual C++, 32-bit Editions, version 6.0 以上•Microsoft OLE 库第一步:建立一个自动化工程1.启动VC 6.0,打开新建对话框,新建一个MFC AppWizard(exe)工程,这里工程明设置为TestExcel。
2.进入MFC 应用程序向导,选择基本对话框,直接点击完成,工程文件结构如下图:3.打开MFC ClassWizard窗口(查看—>建立类向导),选择Automation,单击AddClass按钮,选择From a type library...,弹出文件选择对话框,之后定位到Microsoft Office的安装目录(通常为C:\Program Files\Microsoft Office\Office),选择EXCEL9.OLB注意,确定后,弹出Confirm Classes窗口,选择列表中的所有类,单击OK按钮。
注意文件名EXCEL9.OLB,因安装的Office版本不同而有所差异,EXCEL9.OLB对应的是Microsoft Office 2000,微软命名方式为Excel+数字的形式,Office版本越高,数字越大。
4.返回编辑器,查看工程文件,可发现多了EXCEL9.H及EXCEL9.CPP两个文件。
5.打开stdafx.h头文件确保包含如下头文件:#include <afxdisp.h>#include "excel9.h"6.打开TestExcel.cpp文件,修改CTestExcelApp::InitInstance(),加入如下代码:BOOL CTestExcelApp::InitInstance(){if( !AfxOleInit() ){AfxMessageBox("初始化Ole出错!");return FALSE;}AfxEnableControlContainer();............return FALSE;}为保证编译时不产生重复定义错误,打开excel9.h文件,在文件开始位置加入如下代码:#if !defined _HEAD_FILE_EXCEL9_#define _HEAD_FILE_EXCEL9_相应的,在文件末尾加入:#endif到此,OLE自动化工程建立完成。
mfc项目开发实例85个
mfc项目开发实例85个标题:MFC项目开发实例85个引言概述:MFC(Microsoft Foundation Classes)是微软公司开发的一套用于Windows操作系统的C++类库,用于快速开发Windows应用程序。
本文将介绍85个MFC项目开发实例,涵盖了各种常见的应用场景和功能需求。
正文内容:一、图形界面开发1.1 绘制基本图形- 绘制直线- 绘制矩形- 绘制椭圆- 绘制多边形1.2 图像处理- 图像的加载与显示- 图像的缩放与旋转- 图像的滤波处理- 图像的边缘检测1.3 用户交互界面- 按钮控件的使用- 文本框控件的使用- 列表框控件的使用- 树形控件的使用二、文件操作2.1 文件的读取与写入- 文本文件的读取与写入- 二进制文件的读取与写入- CSV文件的读取与写入- XML文件的读取与写入2.2 文件的拷贝与移动- 文件的复制与粘贴- 文件的剪切与粘贴- 文件的重命名- 文件的删除与恢复2.3 文件的压缩与解压- ZIP文件的压缩与解压- RAR文件的压缩与解压- GZIP文件的压缩与解压- 7z文件的压缩与解压三、数据库操作3.1 数据库连接与断开- SQL Server数据库的连接与断开- MySQL数据库的连接与断开- Oracle数据库的连接与断开- SQLite数据库的连接与断开3.2 数据库查询与更新- 数据库表的创建与删除- 数据库表的查询与筛选- 数据库表的插入与更新- 数据库表的删除与修改3.3 数据库事务处理- 数据库事务的开启与提交- 数据库事务的回滚与撤销- 数据库事务的锁定与解锁- 数据库事务的并发控制四、网络通信4.1 TCP/IP通信- TCP客户端的创建与连接- TCP服务器的创建与监听- TCP数据的发送与接收- TCP连接的关闭与断开4.2 UDP通信- UDP客户端的创建与连接- UDP服务器的创建与监听- UDP数据的发送与接收- UDP连接的关闭与断开4.3 HTTP通信- HTTP请求的发送与接收- HTTP响应的处理与解析- HTTP连接的保持与断开- HTTP代理的设置与使用五、多线程编程5.1 线程的创建与销毁- 线程的创建与启动- 线程的暂停与恢复- 线程的结束与销毁- 线程的优先级设置与调整5.2 线程同步与互斥- 互斥锁的使用- 信号量的使用- 事件的使用- 临界区的使用5.3 线程通信与消息传递- 线程间的数据传递- 线程间的消息传递- 线程间的事件通知- 线程间的同步与异步处理总结:综上所述,本文介绍了85个MFC项目开发实例,涵盖了图形界面开发、文件操作、数据库操作、网络通信和多线程编程等多个方面。
MFC应用程序编写实例—完整版(原创)
MFC应⽤程序编写实例—完整版(原创)前段时间,将近花了⼀周⾄两周上班和上班后的闲余时间,做了⼀个⽤于调试和测试⼯作项⽬的应⽤软件,下⾯将实现软件的重要步骤及主要功能讲解⼀遍,⽅便⽇后查阅。
程序开始后,提⽰登录框,输⼊⽤户名,密码后,登录进去主窗体,效果图如下:下⾯将主要实现的功能函数要点进⾏描述,具体实现如下:⼀、设置主窗体⼤⼩1、进⼊⼯程窗体初始化函数,OnInitDialog()中,在CDialog::OnInitDialog() 下⾯添加函数语句如下:SetWindowPos(NULL,0,0,600,400,SWP_NOMOVE); ////设置主窗体⼤⼩,长为600,⾼为400⼆、为主窗体添加背景图⽚:1、⾸先,在⼯程头⽂件中,声明画刷变量如:CBrush m_brBk;2、在⼯程OnInitDialog()中,添加如下代码:CBitmap bmp1;bmp1.LoadBitmap(IDB_BITMAP1);m_brBk.CreatePatternBrush(&bmp1);3、添加消息函数OnCtlColor,代码如下所⽰:HBRUSH CDebugDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// if (pWnd == this)//// {//// return m_brBk;//// }return(HBRUSH) m_brBk;}三、调⽤模态对话框和⾮模态对话框(以菜单⼊⼝为例)如菜单所属的主窗体类名为CDebugDlg,调⽤对话框的类名为CPing实现调⽤⾮模态对话框⽅法:选择调⽤菜单⼊⼝后,点击添加消息处理函数,在函数体内添中如下代码:CPing *dlg = new CPing();dlg->Create(IDD_DIALOG_PING); //创建⼀个⾮模态对话框dlg->ShowWindow(SW_SHOW); //显⽰⾮模态对话框 实现调⽤模态对话框⽅法:Cping dlg;dlg.DoModal();四、调⽤外部应⽤程序⽅法:1、调⽤外部应⽤程序可采⽤WinExec函数例如,调⽤⼀个Tcpview.exe外部程序,可在消息处理函数中添加如下代码:WinExec(".\\dll\\TCPview\\Tcpview.exe",SW_SHOW); // 其中.代表当前路径,此时需要⽤到\\来区分路径。
vc++ 编程实例
vc++ 编程实例在VC++编程中,可以实现各种有趣和实用的应用程序。
下面是一些VC++编程的实例和相关参考内容:1. 窗体应用程序:使用MFC框架创建一个基本的窗体应用程序是VC++编程中的常见任务之一。
可以参考MSDN的官方文档和教程,如《Visual C++ Step by Step》和《MFC Programming from the Ground Up》。
2. 控制台应用程序:控制台应用程序是一种不需要图形界面的程序。
可以使用VC++编写各种控制台应用程序,如计算器、学生管理系统等。
可以参考《Visual C++ 6.0 Console Applications》这本书中的例子。
3. 图像处理应用程序:VC++提供了丰富的图像处理库和函数,可以用来创建图像编辑器、图像滤镜等应用程序。
可以参考《Computer Vision for Visual Effects》这本书中的例子。
4. 数据库应用程序:VC++可以与各种数据库进行交互,如SQL Server和Oracle。
可以使用ADO和ODBC等技术编写数据库应用程序。
可以参考《Professional Visual C++/MFC》这本书中的例子。
5. 网络应用程序:VC++可以用来开发各种网络应用程序,如聊天室、网络游戏等。
可以使用WinSock库来实现网络通信。
可以参考《Network Programming for Microsoft Windows》这本书中的例子。
6. 多线程应用程序:VC++可以用来编写多线程应用程序,以提高程序的性能和用户体验。
可以使用C++标准库中的std::thread和std::mutex等类来实现多线程编程。
可以参考《Multithreading Applications in Win32》这本书中的例子。
7. DirectX游戏应用程序:VC++可以用来编写基于DirectX的游戏应用程序。
可以使用DirectX SDK中的各种库和函数来实现游戏逻辑、图形渲染等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第10章 Visual C++编程实例
图 10-2
第10章 Visual C++编程实例
在CmyWnd类中声明了一个数组成员m_rectBubble,
用于存放泡泡的数据;另外,还声明了一个整型数据 成员m_nBubbleCount, 用来存放数组中泡泡的实际数量。 在框架窗口类的构造函数中该成员变量被初始化为0, 由于构造函数非常简单,因此使用了内联函数的形式。
第10章 Visual C++编程实例
程序开始
生成CwinApp 的一个实例, 初始化全局对象 AfxWinMain() 的函数体 初始化句柄
退出句柄 WindMain () 的函数体 消息循环
退出句柄
程序结束
图 10-1
第10章 Visual C++编程实例
一个MFC程序运行的一般过程如下:
(1) 生成CwinApp的一个实例(调用CwinApp的构造函数), 初始化全局对象; (2) Win32入口程序函数WinMain调用函数AfxWinMain; (3) AfxWinMain调用函数CwinApp的成员函数InitInstance;
第10章 Visual C++编程实例
3) 窗口的状态
(1) ShowWindow:显示或隐藏一个窗口,显示可以 有多种方式:最大化、最小化、正常显示等。 (2) IsWindowEnabled:判断一个窗口是否可见。 (3) IsWindowEnabled:判断窗口的禁止/使能状态,
禁止状态的窗口不能响应用户的键盘和鼠标的输入。
第10章 Visual C++编程实例
10.2 常用MFC类和消息处理
10.2.1 常用MFC类 MFC的类构成了一个完整的体系,该体系由一个 被称为Cobject的类作为基类,其它类大部分由该类派 生而来,如CWnd(窗口类)、Cdocument(文档类)、 Cfile(文件类)等。也有一部分类如字符串类,Cstring和
void CMyWnd::OnLButtonDown(UINT nFlags,CPoint point) { if(m_nBubbleCount<MAX_BUBBLE) {
int r=rand()%50+10;
CRect rect(point.x-r,point.y-r,point.x+r,point.y+r); m_rectBubble[m_nBubbleCount]=rect; m_nBubbleCount++; InvalidateRect(rect,FALSE);
构 函 数 销 毁 , 而 一 个 Windows 窗 口 则 通 过 CWnd 的
Create函数创建,被DestroyWindow函数销毁。
第10章 Visual C++编程实例
1) 窗口句柄
(1) 窗口句柄的创建:当 CWnd::Create 被调用时, Windows窗口被创建,窗口句柄存放在CWnd的成员变 量m_hWnd中。 (2) 程序中窗口句柄的取得:可以直接利用成员变 量 m_hWnd ,但安全的方法是调用函数 CWnd::Get() , 它返回与窗口对象相关联的句柄,并且当窗口对象没 有关联句柄时或当前CWnd指针为NULL时返回空指针。
第10章 Visual C++编程实例
另பைடு நூலகம்,也可以选择应用程序静态链接到 MFC 。静
态链接意味着,应用程序不依赖于 MFC库文件的存在 ( 但仍然可能需要 Msvcrt.dll 文件 ) 。静态链接的代价是
可执行文件更大,而且MFC 内存的利用可能不够充分。
在菜单中选择“工程”中的“设置”对话框,在 对 话 框 右 方 的 “ General” 选 项 卡 中 通 过 组 合 框 “Microsoft Foundation Classes”选择使用MFC类库的方 法。可选项有三种,分别为“Not Using MFC(不使用 MFC)","Use MFC in a Shared DLL(以动态链接库方式使 用MFC)”和“Use MFC in a Static Library(以静态库方 式使用MFC)”。
(4) EnableWindow:设置窗口的禁止/使能状态,参 数为true表示使能。
第10章 Visual C++编程实例
4) 定时器函数
(1) SetTimer:开始一个系统定时器。定时器的作 用是每隔指定时间发一次WM_TIMER消息。 (2) KillTimer:结束一个指定的系统定时器。 5) 提示函数
第10章 Visual C++编程实例
OnPaint()函数根据数组 m_rectBubble的内容画出一
个泡泡。其中语句。 dc.SelectStockObject(LTGRAY_BRUSH); 用于选择一个库存画刷,画刷决定了所画图形 ( 如 椭圆、矩形和多边形等)内部的颜色。 在处理鼠标消息的ONLButtonDown()函数中,语句 int r=rand()%50+10; 随机确定了要画出的泡泡的半径 ( 范围为10~50像 素点),其中全局函数rand()可产生一个随机整数。
penNew.CreatePen(PS_SOLID,1,RGB(255,0,0));
dc.SelectObject(&brushNew); dc.SelectObject(&penNew);
第10章 Visual C++编程实例
for(int i=0;i<m_nBubbleCount;i++)
dc.Ellipse(m_rectBubble[i]); } //应用程序类 class CMyApp:public CWinApp
(4) AfxWinMain调用函数CwinApp的成员函数Run;
(5) AfxWinMain函数返回到WinMain,WimMain结束,程 序结束。
第10章 Visual C++编程实例
例10-1
吹泡泡程序。每当用户在窗口客户区中按
下鼠标左键时即可产生一个泡泡(彩色圆形)。 设计思路:显示一个泡泡所需的数据包括其位置
(3) 窗口句柄的销毁:调用 CWnd::DestroyWindow 。
第10章 Visual C++编程实例
2) 窗口的大小和位置
(1) IsIconic:窗口是否处在最小化状态。 (2) IsZoomed:判断窗口是否在最大化状态。 (3) MoveWindow:改变窗口的大小、位置和Z轴顺序。 Z轴顺序指本窗口和其他窗口的覆盖关系。
(1) FlashWindow:闪烁窗口。
(2) MessageBox:弹出一个标准消息框。
{
public: BOOL InitInstance(); }; BOOL CMyApp::InitInstance()
第10章 Visual C++编程实例
{
CMyWnd *pFrame=new CMyWnd; pFrame->Create(0,_T("吹彩色泡泡")); pFrame->ShowWindow(m_nCmdShow); this->m_pMainWnd=pFrame;
库(DLL)。这种链接方式显著地减小了应用程序的可执 行文件的大小,并能有效地利用系统资源。
第10章 Visual C++编程实例
用系统资源。
然而,动态链接到 MFC 时要求提供 Mfcnn.dll 库文 件,文件名中的 nn 代表MFC 的版本号。该文件通常在 Windows System 或 System32 文件夹下。如果一个应用 程序动态链接到了 MFC,但该应用程序通常用在那些 可能没有 Mfcnn.dll 库的计算机系统上,则应把这个库 文件作为应用程序包的一部分提供给用户。 Microsoft 允许程序员自由地把这些库文件附在应用程序中。
第10章 Visual C++编程实例
调试:
首先,使用Visual C++集成开发环境中的菜单选项 “ 文 件 / 新 建 ” , 并 在 项 目 选 项 卡 中 选 择 “ Win32 Application"。 其次,在编译时要确定应用程序的可执行程序如
何使用MFC的类库。一种方法是使用共享的动态链接
return TRUE;
} CMyApp ThisApp; //全局应用程序对象 按【Ctrl+F5】运行程序,运行结果如图10-2所示。
第10章 Visual C++编程实例
说明:
该程序声明了两个类,一个是由应用程序类 CwinApp 派生出来的 CmyApp 类,一个是由框架窗口 CframeWnd 类派生出来的 CmyWnd 类。 MFC 的基本类 名均以字母 C 打头,习惯上在为使用 MFC 编写的应用 程序中的类起名时也这样做。在程序中还声明了一个 CmyWnd类的全局对象ThisApp。
和大小,在MFC 中可用其包含矩形表示。可设置一数
组,每当用户按下鼠标左键时,就产生一个泡泡的数 据并存入数组中。最后,由框架窗口类的 OnPaint() 函 数显示所有的泡泡。
第10章 Visual C++编程实例
#include<afxwin.h>
#define MAX_BUBBLE 250 class CMyWnd:public CFrameWnd { CRect m_rectBubble[MAX_BUBBLE];
}
第10章 Visual C++编程实例
}
void CMyWnd::OnPaint() {