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编程概述】
![VC++6[1].0入门【第三章、MFC编程概述】](https://img.taocdn.com/s3/m/770bb56f58fafab069dc0213.png)
第三章 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++类库的形式提供给用户,以充分满足构成应用程序操作界面的需要。
- 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() {