??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩成人激情,99re热这里只有精品免费视频,亚洲精品国产精品久久清纯直播 http://m.shnenglu.com/qywyh/category/5228.html?>blogzh-cnMon, 19 May 2008 17:23:13 GMTMon, 19 May 2008 17:23:13 GMT60【{】MFC时候用全局变量http://m.shnenglu.com/qywyh/articles/33003.html?/dc:creator>?/author>Thu, 27 Sep 2007 03:39:00 GMThttp://m.shnenglu.com/qywyh/articles/33003.htmlhttp://m.shnenglu.com/qywyh/comments/33003.htmlhttp://m.shnenglu.com/qywyh/articles/33003.html#Feedback0http://m.shnenglu.com/qywyh/comments/commentRss/33003.htmlhttp://m.shnenglu.com/qywyh/services/trackbacks/33003.html
用MFC制作的工E由很多文g构成Q它不能象一般C++E序那样随意在类外定义全局变量Q在q里要想定义能被工程内多个文件共享的全局变量和函数必ȝ一些特D方法才行。实际上有多U方法可以实玎ͼq里只介l两U方法?

一、在应用E序cM定义

用MFC生成的工E中都有一个名为CxxxApp的类Q它z于CWinAppcR这个类主要q行E序的初始化Q生成文、视囑֯象等工作。我们可以把需要全局讉K的变量和函数定义个类的成员变量和成员函数Q就可以实现全局讉K了?

从严格意义上Ԍq种变量和函数ƈ不是全局的,因ؓ它仍然只是类中的成员Q只是由于我们很Ҏ获得CxxxAppcȝ指针Q所以我们可以在文、视图、对话框以及各种自定义类中访问到它们Q达C全局变量cM的效果。访问时用函?#8220;AfxGetApp()”获得CxxxAppcȝ指针Q用“AfxGetApp()->成员”讉K变量或函数?

例:

Test.hQ(应用E序cd文gQ?

class CTestApp : public CWinApp
{
public:
int x; //全局变量
int f(int y); //全局函数
…………
};

Test.cppQ(应用E序cȝ序文Ӟ

int CTestApp::f(int y) //全局函数定义
{
y++;
return y;
}

定义在CTestAppcM的变量和函数可以在其它类中被讉K。比如在视图的某函数中要讉K变量x和函数f()Q?

void CTestView::xyz()
{
CTestApp *app = (CTestApp *)AfxGetApp(); //生成指向应用E序cȝ指针
app->x = 0; //讉K变量x
int z = app->f(1); //讉K函数f()
…………
}

q样Q变量x和函数f()可以视作为全局的?

用这U方法实现的全局变量和全局函数虽比较简单,但也有缺点,一是访问不太方便,每次都需要获取应用程序类的指针;再就是把一些与应用E序cLw无关的变量和函数放在里面,使这个类看上L怪的Q破坏了cȝ装?

二、用静态变量和静态函数实?

很喜ƢAPI函数的那U调用方法,不论在哪个类中只要用“::API函数”可以调用了。合理利用静态类?static)可以实现与此怼的全局变量和全局函数?

静态变量和静态函数有如下性质Q?

若在一个类中用关键字static声明数据成员Q则q个数据成员只存在一个拷贝,无论该类创徏了多个实例Q它始终只存在一个,即该类的实例一个也没创建,它也存在?

若在一个类中用关键字static声明函数Q该函数可以?#8220;cd::函数?#8221;方式讉KQ无需引用该类的实例,甚至q个cȝ实例可以不存在?

利用q个性质实现的全局变量和函C用v来很方便?

值得注意的是Q全局变量和全局函数最好集中封装,不要在文档、视囄cd部定义,q样用v来才有全局的感觉?

例:

1、添加一个没有基cȝ新类Q设cd起ؓCPublicQ姑且称之ؓ公用c?

单击“Insert”菜单下的“New Class”命oQ选择“Class type”?#8220;Generic Class”Q在“Name”栏中填入cd“CPublic”Q单?#8220;OK”Q则新类建立完毕?

2、包含公用类的头文gQ各个c都能访问它

CPublic的头文g应包含在应用E序cȝ头文件中Q这样在其它cM引用CPubliccL׃需要再包含了?

Test.hQ(应用E序cd文gQ?

#include "Public.h" //包含公用cd文g

class CTestApp : public CWinApp
{
…………
};

3、在公用cM定义全局变量和全局函数Q均使用static修饰Q静态变量还必须在类外定义和初始?

Public.hQ(公用cd文gQ?

class CPublic
{
public:
CPublic();
virtual ~CPublic();

public:
static int x; //全局变量
static int time; //全局变量
static int f(int y); //全局函数
…………
}

在公用类中对静态变量进行初始化和定义函CQ?

Public.cppQ(公用cȝ序文Ӟ

int CPublic::x = 0; //初始化全局变量
int CPublic::time; //定义全局变量

CPublic::CPublic()
{

}

CPublic::~CPublic()
{

}

int CPublic::f(int y) //全局函数Q这里不要再加static
{
y++;
return y;
}

4、全局量的使用

使用变量QCPublic::变量?

使用函数QCPublic::函数()

如在视图的某函数中访问变量x和函数f()Q?

void CTestView::xyz()
{
CPublic::x = 0; //讉K变量x
CPublic::time = CPublic::f(1); //讉K函数f()
…………
}

在其它类中访问x、time和f()的方法与此相同?

5、几Ҏ意:

?׃静态量可独立于cd在,不需要生成CPubliccȝ实例?

?静态数据成员的定义和初始化必须在类外进行,如例中x的初始化Q变量time虽然没有初始化,但也必须在类外进行定义。由于没有生成CPubliccȝ实例Q所以它的构造函数和析构函数都不会被执行Q在里面做什么工作都没有什么意义?

?如果静态函数需要访问CPubliccd的变量,q些变量也必Mؓ静态的。因为非静态量在不生成实例旉不会存在?如:

class CPublic
{
public:
int x; //内部变量
static int f(int y) //全局函数
{
x++;
return x;
};
…………
};

q里x虽ؓcd成员Q但如果不生成CPubliccȝ实例Q就会出现函数f()存在Q而变量x不存在的问题?

MQ用没有实例的类理全局量是一个不错的选择Q它h集中理Q用方便的好处。当Ӟ除非特别必要Q全局量还是少用ؓ好,一个好的编E者决不会随意滥用全局量的Q一个封装做得不好的E序Q在修改l护时会让你吃苦头?

]]>
【{】在MFC中用Tab Controlhttp://m.shnenglu.com/qywyh/articles/32869.html?/dc:creator>?/author>Tue, 25 Sep 2007 15:37:00 GMThttp://m.shnenglu.com/qywyh/articles/32869.htmlhttp://m.shnenglu.com/qywyh/comments/32869.htmlhttp://m.shnenglu.com/qywyh/articles/32869.html#Feedback0http://m.shnenglu.com/qywyh/comments/commentRss/32869.htmlhttp://m.shnenglu.com/qywyh/services/trackbacks/32869.html转自Q?a >http://hi.baidu.com/blue_never_died/blog/item/04398694249ef71ed21b7007.html

说实话,我刚开始看见Tab Control的时候,觉得很简单。哪知道用了一下,才发现自己错了?/p>

要用好它Q还是需要一些技巧的。经q网上搜索资料,以及我自q摸烦Q把一些要点记录在q里?/p>

Tab Control的运行效果有点像Property SheetQ但两者还是有一些区别。我的理解就是Property Sheet主要用在对话框中Q对数据q行q行分类理。而Tab Control使用范围更广一些,既可以用在对话框Q也可以用在视图中,除了可以理配置数据外,q可以对软g的组l进行规划,比如可以通过它来切换不同的视囄{?/p>

当然q不是没有代LQTab Control的编E就比Property Sheet的复杂很多?/p>

 我最初有Ҏ不懂Q如何在Tab Control中用不同的PageQ就象Property Page一PTab Controlq没有提供便利的机制让你L做到q一炏V还好,VC是最的Q撒花~通过变通的Ҏq是可以做到q一炏V?/p>

不罗嗦了Q上代码?/p>

假如我现在有个SDIE序QView是Form ViewQ想在上面放个Tab ControlQ包含两个Page。现在让我们来看看应该怎样处理?/p>

首先当然要增加一个Tab Control资源Q然后利用Class WizardQ在View中增加一个Control变量?/p>

接着建立两个对话框资源,别忘了把Style改ؓChildQBorder改ؓNone。然后就可以在上面加其他控g了?/p>

接着利用Class WizardQ分别ؓq两个对话框建立两个c,比如CPage1和CPage2?/p>

然后在Viewcd文g中,加入q两个对话框对象。同时增加一个变量int m_CurSelTabQ用了表明是哪个Page卛_被切换?/p>

Z避免用户在切换TabӞE序对Tab Index的枚举,可以利用数组来做q个事情?/p>

在View的初始化函数中需要把CPage1、CPage2和Tab Control兌hQƈ保存面地址Q设|初始页面,{等?/p>

void CTab_testView::OnInitialUpdate()
{
   CFormView::OnInitialUpdate();
   GetParentFrame()->RecalcLayout();
   ResizeParentToFit();
    
    //为Tab Control增加两个面
    m_tab.InsertItem(0, _T("First"));
    m_tab.InsertItem(1, _T("Second"));
   
    //创徏两个对话?br>    m_page1.Create(IDD_DIALOG1, &m_tab);
    m_page2.Create(IDD_DIALOG2, &m_tab);

    //讑֮在Tab内显C的范围
    CRect rc;
    m_tab.GetClientRect(rc);
    rc.top += 20;
    rc.bottom -= 8;
    rc.left += 8;
    rc.right -= 8;

    m_page1.MoveWindow(&rc);
    m_page2.MoveWindow(&rc);

    //把对话框对象指针保存h
    pDialog[0] = &m_page1;
    pDialog[1] = &m_page2;

    //昄初始面
    pDialog[0]->ShowWindow(SW_SHOW);
    pDialog[1]->ShowWindow(SW_HIDE);

    //保存当前选择
    m_CurSelTab = 0;
}

q里面需要注意的是,我用了一个CDialog指针数组来进行保存,数组的大是Tab Control面的个敎ͼ数组下标对应着每个面的烦引(q样方便快速存取)?/p>

用户切换Ӟ需要响应相关的消息?/p>

void CTab_testView::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
 // TODO: Add your control notification handler code here
   
    pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
    m_CurSelTab = m_tab.GetCurSel();
    pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);

 *pResult = 0;
}

首先我们先把当前的页面隐藏v来,然后得到新的面索引Q最后就把相关页面显C出来即可。这比一个个L丄单多了?/p>

q有一Ҏ较有意思,那就是DDX/DDV机制的运用。要惌得Tab Control各个面的数据,可以利用DDX/DDV机制Q但需要注意,因ؓq是多个面Q所以需要显式调用多ơ?/p>

void CTab_testView::OnButton1()
{
 // TODO: Add your control notification handler code here
    m_page1.UpdateData();
    m_page2.UpdateData();
    CString str1 = m_page1.m_str1;
    CString str2 = m_page2.m_str2;
    AfxMessageBox(str1);
    AfxMessageBox(str2);
}

l过q几步处理,基本上我们就可以利用Tab Control的强大功能了?br>



]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            ŷϵϵ| ŷ| ŷһĻƷ| ŷ߳Ƶ| ŷ4ҳ| ŷպ޼| Ʒպŷһ| ۺϾƷ| ޾þƵ| Ӱ| þӰӾƷ| պŷۺ| ŷרר| ŷƵ| ۲һ߹ۿ | 99ֻоþþƷƵ| պƵһ߲ѹۿ | ξþ99Ʒþþûʳ| þƵ| ޴Ƭѿ| þþ| ѾþþһƷþ| ƷרƷ| ھƷģav˽߹ۿ| Ůavվ| þþƷѲ| ޾Ʒѿ| þ| պŷ| ҹƷ| ŷgayƵ| Ʒ˿| ŷƷպһ| ˳ۺϵӰ| þòþüƵ1| ŷٸ| һɫþۺ޶| þþþþþ999| ƷһþþƷ| ޾Ʒһӣ| Ƭһ| ֻɫ| Ʒa| 91þþƷ91þ| ɫav߾Ʒ| ŷһƵ߹ۿ2020 | պŷۺ| ѳavԴ| þüվ| СƵƷ| ŷպһ| ޾ƷһҾ| ѿav| žž91| ޹ר| ŷƷӰ| պƵһ| ޾Ʒһַ| ŷ߹ۿ| 99ֻоƷ| պƵƵ| ŷԸһӰƬ߲| һƷƵ| Ƶһ߹ۿ| Ʒ| ŷһƵ| þùƷþþþþ| ۺַ| ŷһ߹ۿ| ŷƨ| ŷһ| þþƷ77777| һ߹ۿƵ| ޵Ӱ| ŷۺɫС˵| 99re˾ƷƵ| ҹһƵ| һav| ŷ˹vaƷձһ| þѹۿƵ| պһ| ŷպۺ| Ʒ3dһ| ŷ| Ʒһ| ŷһƬaaaaaaaƵ| þþþÿƬ| Ƶaxxx| þþƷƵ| ֻоƷƵ| þþƷ69Ʒ | ŷƵ| պƵѿ| Ƶ99| ŷvպvv| Ʒ| ŷƵһ| ŷСƵ| þö| ƷavҹƬ| av| ƷþëƬa| ŷ߲| պ| ͼƬŷղ| պϵ| þþþžžž| 8sex| ŷպƵһ| þҹƷvaƵѹۿ| Ʒþþþþavغ | Ƶ| ޸Ƶһ| ŷһþþ| ͵ĸ| ŷձ߹ۿ| ޵ӰĻ| þ| ŷ߲| ŷվ| ƷŮþþ| պƵ| Ƶһ| ŷպһ| ŷӰԺ| ޹Ƶ| ˾þ| ޳ɫ999þվ| ߹ۿպavӰ| þþƷŷ| þþþþþۺձ| һ| ŷ߹ۿһ| ŷ߲Ƶ| Ŀ޾Ʒ99þþƷ| ֻоƷ߲| Ƶ| Ʒþþþ| ӰԺ| þöۺ¹վ| ƷҹСƵ| ҹþþþþ| þһۺƵ| ؼؼŷһ | ŷһӰԺ| ŷһ| ۺϳ| þþƷһ| ҹþþþ| þav| ޾Ʒþ| ŷþþҹһ | ŷ߾Ʒһ| ŷƷ߲| þþ99| ޾Ʒ| ҹƷþþþþþ| վŷպѾƷ߹ۿ | ˾һ| ޹Ʒva߹ۿ| ŷƵ| ҹav| ŷva| ˵aƵ| һþþ| ŷƷ߲| ߹ۿ| ŷƷ| ҹ޸| ˳վ999þþۺ| ŷҹڵ| þƵ| Ƶh| ŷ91| ŷר| Ʒջһ| һ߹ۿ| ŷպ| þþƷŷպƷ| һѿ| ŷҹӰԺ| ŷ˾þþþþҹþþþ| ޵һר| Ʒ| ŷ| ŷƷѲ| Ƶ߹ۿ| ŷһƷ| һ| 99Ʒŷһۺ| ߿һ| þˬ| þþþƷպ| ŷ߹ۿƵһ| ľþþƷ| ҹ߹ۿ| һɫۺϵ| av| һƵ| Ļmvһ|