mfc怎么设置全局变量怎么定义

MFC中如何设置与控件关联的变量的小数点位数_VC/MFC大全_优良自学吧 |
当前位置: >
> MFC中如何设置与控件关联的变量的小数点位数优良自学吧提供MFC中如何设置与控件关联的变量的小数点位数,MFC中怎么设置与控件关联的变量的小数点位数?我现在把EDIT1 和EDIT2 关联变量float型m_a,和m_b后,现在怎么改变它的小数点位数啊?急~~~~~~~~~我是C++新人,麻烦了~~~,在对话框的.CPP文件里:void CSpinDotDlg::DoDataExchange(CDMFC中怎么设置与控件关联的变量的小数点位数?我现在把EDIT1 和EDIT2 关联变量float型m_a,和m_b后,现在怎么改变它的小数点位数啊?急~~~~~~~~~我是C++新人,麻烦了~~~------解决方案--------------------在对话框的.CPP文件里:void CSpinDotDlg::DoDataExchange(CDataExchange* pDX){CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_Edit1);DDX_Control(pDX, IDC_SPIN1, m_Spin1);}BEGIN_MESSAGE_MAP(CSpinDotDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, &CSpinDotDlg::OnDeltaposSpin1)END_MESSAGE_MAP()// CSpinDotDlg 消息处理程序BOOL CSpinDotDlg::OnInitDialog(){CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX & 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){BOOL bNameVCString strAboutMbNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu-&AppendMenu(MF_SEPARATOR);pSysMenu-&AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon, FALSE); // 设置小图标m_PrePos=0;CRect rect,rect1;GetDlgItem(IDC_EDIT1)-&GetClientRect(rect);GetDlgItem(IDC_EDIT1)-&GetWindowRect(rect);m_Spin1.GetClientRect(rect1);ScreenToClient(rect);m_Edit1=0.0f;// m_Spin1.SetBuddy(GetDlgItem(IDC_EDIT1));//这句一定要去掉,在资源对话框里SPIN的属性里关于Buddy也要先FALSE;m_Spin1.SetRange32(-100,100);m_Spin1.SetPos(1);m_Spin1.SetWindowPos(GetDlgItem(IDC_EDIT1),rect.right,rect.top, rect1.Width(),rect1.Height(),SWP_NOSIZE);UpdateData(FALSE);// TODO: 在此添加额外的初始化代码return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}void CSpinDotDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult){LPNMUPDOWN pNMUpDown = reinterpret_cast&LPNMUPDOWN&(pNMHDR);// TODO: 在此添加控件通知处理程序代码CSint pos,Dpos=pNMUpDown-&iPDelta=pNMUpDown-&iDUpdateData();m_Edit1+=((float)Delta/10.0f);str.Format(&%5.1f&,m_Edit1);GetDlgItem(IDC_EDIT1)-&SetWindowTextA(str);m_PrePos=*pResult = 0;}在对话框里的.h文件:// SpinDotDlg.h : 头文件//#pragma once#include &afxcmn.h&// CSpinDotDlg 对话框class CSpinDotDlg : public CDialogEx{// 构造public:CSpinDotDlg(CWnd* pParent = NULL); // 标准构造函数int m_PreP// 对话框数据enum { IDD = IDD_SPINDOT_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected:HICON m_hI// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:float m_Edit1;afx_msg void OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult);CSpinButtonCtrl m_Spin1;};
------解决方案--------------------关联为CString类型的变量读写的时候,做一下转换/格式化(本文来自互联网,不代表搜站(/)的观点和立场)编辑推荐最近更新MFC中定义全局变量和全局函数的方法
In MFC Defines the Overall Situation Variable and the Overall Situation Function Method
本文对在Visual C++6.0的MFC程序设计过程中,通过实例形式,给出了三种全局变量和全局函数的三种基本方法.
LI Zhi-cong
哈尔滨师范大学,呼兰学院计算机系,黑龙江,哈尔滨,150500
年,卷(期)
机标分类号
本文读者也读过
互动百科相关词
加载中,请稍候
.客服电话
&&8:00-11:30,13:00-17:00(工作日)小弟我在MFC中设置了一个全局变量的类,小弟我在onkeydown中在按下键盘的一个键时想改变该类中的y值,但为什么在ondraw中去不响应没变化_VC/MFC大全_优良自学吧 |
当前位置: >
> 小弟我在MFC中设置了一个全局变量的类,小弟我在onkeydown中在按下键盘的一个键时想改变该类中的y值,但为什么在ondraw中去不响应没变化优良自学吧提供小弟我在MFC中设置了一个全局变量的类,小弟我在onkeydown中在按下键盘的一个键时想改变该类中的y值,但为什么在ondraw中去不响应没变化,我在MFC中设置了一个全局变量的类,我在onkeydown中在按下键盘的一个键时想改变该类中的y值,但为什么在ondraw中去不响应没变化如题,附上代码,求解啊~~~,类怎么可以改变变量呢。你只能改变一个对象的变量,你申明一个全局对象,这个全局对象是这个类的一个实例,然后你就可以改变这个对我在MFC中设置了一个全局变量的类,我在onkeydown中在按下键盘的一个键时想改变该类中的y值,但为什么在ondraw中去不响应没变化如题,附上代码,求解啊~~~------解决方案--------------------类怎么可以改变变量呢。你只能改变一个对象的变量,你申明一个全局对象,这个全局对象是这个类的一个实例,然后你就可以改变这个对象的变量了
------解决方案--------------------按键消息不会重绘当前的界面,所以ondraw函数不会走的,你要刷新一下界面就应该可以了啊
------解决方案--------------------void CTANKView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags){// TODO: 在此添加消息处理程序代码和/或调用默认值/*T.updataMove (nChar);*/if(nChar=='w')T.y-=16;这里查查T.yafxDump && T.y && &\r\n&;看调试窗口
------解决方案--------------------我根据你提供的代码片段,已经进行了跟踪和验证了。(本文来自互联网,不代表搜站(/)的观点和立场)编辑推荐最近更新MFC中定义全局变量和全局函数的方法 - leadtheway - ITeye技术网站
博客分类:
在教授学生使用Visual C++6.0 中的MFC 基本应用时, 由于
MFC 制作的工程由很多文件构成, 它不能象一般C++程序那样随
意在类外定义全局变量, 那样有时会在运行程序时出现问题。在
软件开发过程中, 有时需要在不同的类之间利用全局变量传递数
据, 利用全局函数处理相同问题, 而MFC 没有提供类似其他开发
工具的模块功能, 因此我们只得自己完成。实际上有多种方法可
以实现, 这里介绍三种常用的方法。
2 定义一个全局类的对象来实现
其实生成这个自定义类对象, 我们可以完全参照theApp 对
象的生成方式[1- 2], 自定义一个CMyPublicData 的全局类。然后生
成CMyPublicData 全局对象, 通过对象调用全局变量及全局函数。
实现过程如下:
(1)添加一个没有基类的新类, 设类名起为CMyPublicData, 可
称之为公用类。
单击“Insert”菜单下的“New Class”命令, 选择“Class type”为
“Generic Class”, 在“Name”栏中填入类名“CMyPublicData”, 单击
“OK”, 则新类建立完毕。
(2)创建全局的变量与全局函数
实际上是定义CMyPublicData 类的public 属性的成员变量和
成员函数。
CMyPublicData.h 的内容:
class CMyPublicData
CMyPublicData(void);
virtual ~CMyPublicData(void);
int Public_x;
//自定义了一个int 型全局变量Public_x
void Public_f();
//自定义了一个返回值类型void 无任何参数的全局函数Public_f
extern CMyPublicData MyPublicD //这里声明了自定义全
CMyPublicData.cpp 的内容:
#include "StdAfx.h"
#include "CMyPublicData.h"
CMyPublicData::CMyPublicData(void)
CMyPublicData MyPublicD //实例化全局对象
CMyPublicData::~CMyPublicData(void)
void CMyPublicData::Public_f()//函数的定义
{//此处可增加函数完成实际功能的语句}
(3)包含公用类的头文件, 使各个类都能访问它
CMyPublicData 的头文件应包含在应用程序类的头文件中,
这样在其它类中引用CMyPublicData 类时就不需要再包含了。若
应用程序类的头文件为Example.h, 其样式如下:
#include "CmyPublicData.h" //包含公用类头文件
class CTestApp : public CWinApp
(4)使用全局变量和全局函数
可在整个工程中, 利用MyPublicData.Public_x 形式使用变量,
可多次赋值, 多次调用, 利用MyPublicData.Public_f()形式调用函
数。可实现了全局变量和全局函数。
3 利用应用程序类中定义实现
用MFC 生成的工程中都有一个名为CxxxApp 的类, 其中xxx
一般为应用程序名, 它继承了CWinApp 类。CxxxApp 类主要进行
程序的初始化, 生成文档、视图对象等工作。我们可以把需要全局
访问的变量和函数定义为这个类的成员变量和成员函数。由于我
们很容易获得CxxxApp 类的指针, 所以可以在文档、视图、对话框
以及各种自定义类中访问到它们, 达到与全局变量类似的效果。
访问时用函数“AfxGetApp()”获得CxxxApp 类的指针, 用“AfxGetApp()-
&成员”访问变量或函数[2- 3]。
例: 在Example.h 头文件中( Example.h 为应用程序类头文件)
class CTestApp: public CWinApp {
int Public_x; //全局变量
void Public_f(); //全局函数
Example.cpp:( 应用程序类程序文件)
void CTestApp::Public_f() //全局函数定义
{//此处可增加函数完成实际功能的语句}
定义在CTestApp 类中的变量和函数可以在其它类中被访
问。比如在视图的某函数中要访问变量Public_x 和函数Public_f():
void CTestView::xxx()
{CTestApp *app = (CTestApp *)AfxGetApp(); //得到指向应用
程序类的指针
app- &Public_x = 0; //访问变量Public_x
app- &Public_f(); //访问函数f()
这样, 变量Public_x 和函数Public_f()可以视作为全局的。
以上两种方法可实现的全局变量和全局函数的运用。虽比较
简单, 但也有缺点, 二者都是定义的成员变量和成员函数, 在使用
函数时, 都要隐式地传递this 指针。这样, 有可能对类中的成员不
必要的影响。而第二种方法, 每次都需要获取应用程序类的指针,
这样做比较麻烦。再就是把一些与应用程序类本身无关的变量和
函数放在里面, 使这个类看上去怪怪的, 破坏了类的封装。
4 利用静态变量和静态函数实现
静态变量和静态函数有如下性质:
若在一个类中用关键字static 声明数据成员, 则这个数据成
员就只存在一个拷贝, 无论该类创建了多少个实例, 它始终只存
在一个, 即使该类的实例一个也没创建, 它也存在。
若在一个类中用关键字static 声明函数, 该函数可以用“类
名::函数名”方式访问, 无需引用该类的实例, 甚至这个类的实例
可以不存在。利用这个性质实现的全局变量和函数使用起来就很
值得注意的是, 全局变量和全局函数最好集中封装, 不要在
文档、视图等类内部定义, 这样用起来才有全局的感觉。
(1)添加一个没有基类的新类, 类名为CMyPublicData。
单击“Insert”菜单下的“New Class”命令, 选择“Class type”为
“Generic Class”, 在“Name”栏中填入类名“CMyPublicData”, 单击
“OK”, 新类建立完毕。
(2)包含公用类的头文件, 使各个类都能访问它。
CMyPublicData 的头文件应包含在应用程序类的头文件中,
这样在其它类中引用CMyPublicData 类时就不需要再包含了。
Test.h:( 应用程序类头文件)
#include "CMyPublicData.h" //包含公用类头文件
class CTestApp: public CWinApp
(3)在公用类中定义全局变量和全局函数, 均使用static 修饰,
静态变量还必须在类外定义和初始化。
CMyPublicData.h( 公用类头文件)
class CMyPublicData {
CMyPublicData ();
virtual ~CPublic();
static int Public_x; //全局变量
static void Public_f(); //全局函数
在公用类中对静态变量进行初始化和定义函数体:
CMyPublicData.cpp( 公用类程序文件)
int CMyPublicData::Public_x = 0; //初始化全局变量
void CMyPublicData::f(int y) //全局函数, 这里不再加static
(4)全局量的使用
可利用CMyPublicData::Public_x 和CMyPublicData::Public_f()
使用变量和函九。
如在视图的某函数中访问变量Public_x 和函数Public_f()。
void CTestView::xxx(){
CMyPublicData::Public_x = 0; //访问变量Public_x
CMyPublicData::Public_f(); //访问函数Public_f()
在其它类中访问Public_x 和Public_f()的方法与此相同。
(5) 几点注意: 由于静态量可独立于类存在, 不需要生成
CPublic 类的实例; 静态数据成员的定义和初始化必须在类外进
行, 如例中Public_x 的初始化。由于没有生成CPublic 类的实例,
所以它的构造函数和析构函数都不会被执行, 在里面做什么工作
都没有什么意义。
总之, 用没有实例的类管理全局量是一个不错的选择, 它具
有集中管理, 使用方便的好处。
从严格意义上讲, 以上这种变量和函数并不是全局的。只是通
过定义类中的成员变量和成员函数方式实现。当然, 除非在必要情
况下, 全局量还是少用为好, 一个好的编程者决不会随意滥用全局
量的, 一个封装做得不好的程序, 在修改维护时带来一些麻烦。
leadtheway
浏览: 85140 次
来自: 沈阳

我要回帖

更多关于 thinkphp设置全局变量 的文章

 

随机推荐