MFC中有关CWinAPP类的成员变量和成员方法的应用

CWinApp 应用程序类共63个成员

(由Cobject-CCmdTarget-CWinThread派生)

#include <afxwin.h>

CWinApp类是你派生Windows应用程序对象的基类。应用程序对象提供初始化你的应用程序
(及其每个实例)的成员函数,并运行该应用程序。

每个使用MFC类的应用程序只能包含一个CWinApp派生类对象。当Windows调用由MFC库提供
的WinMain函数时,其它C++全局对象被创建并生效,该对象(CWinApp派生类)被创建。你应
该在全局级声明它。

当你从CWinApp 派生一个应用程序类时,重载InitInstance成员函数来创建应用程序的主
窗口对象。在添加CWinApp成员函数时,MFC库提供下列全局函数来访问你的CWinApp对象和
其它全局信息:

AfxGetApp 获得CWinApp对象指针。

AfxGetInstanceHandle 获得当前应用程序实例的句柄。

AfxGetResourceHandle 获得应用程序资源句柄。

AfxGetAppName 获得一个字符串指针,该字符串包含应用程序名称。换个方式,如果你有
一个CWinApp对象指针,可用m_pszExeName来得到应用程序名称。

See CWinApp: The Application Class in Visual C++ Programmer's Guide for more o
n the CWinApp class, including an overview of the following:

CWinApp-derived code written by AppWizard.

CWinApp's role in the execution sequence of your application.

CWinApp's default member function implementations.

CWinApp's key overridables.

◆数据成员

1、m_pszAppName

指定程序名称。

程序名称可来自传送给CWinApp构造函数的参数,如果没有指定,就利用ID号为AFX_IDS_A
PP_TITLE的资源字符串,再没有的话就使用程序的EXE文件名称。

该数据成员是全局函数AfxGetAppName的返回值,它是const char*型的公共变量。

注意: 如果你要给m_pszAppName赋值,必须动态分配堆栈。CWinApp的析构函数以该指针
调用free( )。你可能想用_tcsdup( )运行时库函数来做内存分配,也要用还未赋新值的当
前指针释放内存。举例如下:

//在CWinApp启动时首先释放由MFC分配的字符串。

//该字符串在InitInstance被调用前被分配。

free((void*)m_pszAppName);

//改变程序文件名称。

//CWinApp的析构函数将释放内存。

m_pszAppName=_tcsdup(_T("d://somedir//myapp.exe"));

 

例子:

CWnd* pWnd;

// 设置pWnd到某些窗口已创建的CWnd对象。

// 下面调用CWnd::MessageBox使用了应用程序标题作为消息窗口名称。

pWnd->MessageBox("Some message", AfxGetApp()->m_pszAppName);

// 获得程序标题更直接的途径是调用AfxGetAppName:

pWnd->MessageBox("Some message", AfxGetAppName());

// 以应用程序标题作为消息框名称来显示消息框的更容易的方法

//是调用AfxMessageBox:

AfxMessageBox("Some message");

2、m_hInstance

识别当前应用程序实例。

与Windows传送给WinMain的参数hInstance一致。m_hInstance数据成员是Windows应用程序
当前实例的句柄,它是全局函数AfxGetInstanceHandle的返回值,是一个HINSTANCE型的公
共变量。

例子:

//通常你不必直接传送程序的hInstance给Windows APIs,因为这与MFC

//成员函数的作用等同等同,下面的例子不是通常作法:

HCURSOR hCursor;

hCursor = ::LoadCursor(AfxGetApp()->m_hInstance,

MAKEINTRESOURCE(IDC_MYCURSOR));

// 获得程序hInstance更直接的途径是调用AfxGetInstanceHandle:

hCursor = ::LoadCursor(AfxGetInstanceHandle(),

MAKEINTRESOURCE(IDC_MYCURSOR));

// 如果你需要用hInstance来加载一个资源,最好调用AfxGetResourceHandle

//而不是AfxGetInstanceHandle:

hCursor = ::LoadCursor(AfxGetResourceHandle(),

MAKEINTRESOURCE(IDC_MYCURSOR));

//加载光标资源的更好途径是调用CWinApp::LoadCursor

hCursor = AfxGetApp()->LoadCursor(IDC_MYCURSOR);

3、m_hPrevInstance

在32位程序中被设为NULL。

与Windows传送给WinMain的参数hPrevInstance一致。在32位程序中该数据成员总是NULL。
要查找应用程序前一个实例,可用CWnd::FindWindow。

4、m_lpCmdLine

指向以null结尾的字符串,该字符串指定应用程序的命令行。

与Windows传送给WinMain的参数lpCmdLine一致。用m_lpCmdLine来访问当应用程序开始时
用户输入的任何命令行参数。m_lpCmdLine是LPSTR型的公共变量。

例子:

BOOL CMyApp::InitInstance()

{

// ...

if (m_lpCmdLine[0] == '/0')

{

// Create a new (empty) document.

OnFileNew();

}

else

{

// Open a file passed as the first command line parameter.

OpenDocumentFile(m_lpCmdLine);

}

// ...

}

5、m_nCmdShow

指定窗口最初如何显示。

与Windows传送给WinMain的参数nCmdShow一致。当你为程序主窗口调用CWnd::ShowWindow
时应该将m_nCmdShow作为一个参数传送。m_nCmdShow 是整型公共变量。

例子:

BOOL CMyApp::InitInstance()

{

// ...

// Create main MDI Frame window.

CMainFrame* pMainFrame = new CMainFrame;

if (!pMainFrame->LoadFrame(IDR_MAINFRAME))

return FALSE;

// Save the pointer to the main frame window. This is the

// only way the framework will have knowledge of what the

// main frame window is.

m_pMainWnd = pMainFrame;

// Show the main window using the nCmdShow parameter

// passed to the application when it was first launched.

pMainFrame->ShowWindow(m_nCmdShow);

pMainFrame->UpdateWindow();

// ...

}

6、m_bHelpMode

指示用户是否在Help上下文模式 (典型地按SHIFT+F1呼唤)。

TRUE表明程序处于Help上下文模式;否则为FALSE。在Help上下文模式,光标变成问号并且
用户能在屏幕中移动它。如果你想在帮助模式实现指定操作,就检查该标志。m_bHelpMod
e是BOOL型公共变量。

7、m_pActiveWnd

这是一个当OLE服务器在位激活时指向容器程序的主窗口的指针。

如果该数据成员为NULL,则应用程序没有在位激活。

当框架窗口被OLE容器程序在位激活时,工作框架设置该成员变量。

8、m_pszExeName

应用程序的模块名称。

包含应用程序的不带扩展名的可执行文件名。不象m_pszAppName,该名称不能包含空格。
m_pszExeName是const char*型的公共变量。

注意:如果你要给m_pszExeName赋值,必须动态分配堆栈。CWinApp的析构函数以该指针调
用free( )。你可能想用_tcsdup( )运行时库函数来做内存分配,也要用还未赋新值的当前
指针释放内存。举例如下:

//在CWinApp启动时首先释放由MFC分配的字符串。

//该字符串在InitInstance被调用前被分配。

free((void*)m_pszExeName);

//改变.EXE文件名称。

//CWinApp的析构函数将释放内存。

m_pszExeName=_tcsdup(_T("d://somedir//myapp"));

9、m_pszHelpFilePath

指针,指向包含应用程序的帮助文件的路径的字符串。

缺省方式下,工作框架初始化m_pszHelpFilePath为附带".HLP"文件的应用程序名称。要改
变帮助文件的名称,将m_pszHelpFilePath指向包含帮助文件完整名称的字符串。这个步骤
适宜放在应用程序的初始化函数InitInstance中。m_pszHelpFilePath是const char*型的
公共变量。

注意:如果你要给m_pszHelpFilePath赋值,必须动态分配堆栈。CWinApp的析构函数以该
指针调用free( )。你可能想用_tcsdup( )运行时库函数来做内存分配,也要用还未赋新值
的当前指针释放内存。举例如下:

//在CWinApp启动时首先释放由MFC分配的字符串。

//该字符串在InitInstance被调用前被分配。

free((void*)m_pszHelpFilePath);

//改变.HLP文件名称。

//CWinApp的析构函数将释放内存。

m_pszHelpFilePath=_tcsdup(_T("d://somedir//myhelp.hlp"));

10、m_pszProfileName

const char*型的公共变量,应用程序的.INI文件名。

注意:如果你要给m_pszProfileName赋值,必须动态分配堆栈。CWinApp的析构函数以该指
针调用free( )。你可能想用_tcsdup( )运行时库函数来做内存分配,也要用还未赋新值的
当前指针释放内存。举例如下:

//在CWinApp启动时首先释放由MFC分配的字符串。

//该字符串在InitInstance被调用前被分配。

free((void*)m_pszProfileName);

//改变.INI文件名称。

//CWinApp的析构函数将释放内存。

m_pszProfileName=_tcsdup(_T("d://somedir//myini.ini"));

11、m_pszRegistryKey

用来检测储存应用程序描述设置的全部注册键。通常它是只读态的。

LPCTSTR m_pszRegistryKey;

注意:如果你要给m_pszRegistryKey赋值,必须动态分配堆栈。CWinApp的析构函数以该指
针调用free( )。你可能想用_tcsdup( )运行时库函数来做内存分配,也要用还未赋新值的
当前指针释放内存。举例如下:

//在CWinApp启动时首先释放由MFC分配的字符串。

//该字符串在InitInstance被调用前被分配。

free((void*)m_pszRegistryKey);

//改变registry键名称。

//CWinApp的析构函数将释放内存。

m_pszRegistryKey=_tcsdup(_T("HKEY_CURRENT_USER//Software//mycompany//myapp//th
issection//thisvalue"));

◆构造

12、CWinApp

创建一个CWinApp对象。

CWinApp( LPCTSTR lpszAppName = NULL );

参数:

lpszAppName 是一个null结尾的字符串,它包含供Windows使用的应用程序名称。如果该参
数未被提供或为NULL,CWinApp使用资源字符串AFX_IDS_APP_TITLE或可执行文件名。

备注:

创建一个CWinApp对象并传送lpszAppName以应用程序名称保存。你可以创建一个由CWinAp
p派生的全局对象。你只能有一个CWinApp对象在应用程序中。构造函数保存指向该CWinAp
p对象的指针,这样WinMain就能调用该对象的成员函数来做初始化并运行该应用程序。


◆操作

13、LoadCursor

加载光标资源。

HCURSOR LoadCursor( LPCTSTR lpszResourceName ) const;

HCURSOR LoadCursor( UINT nIDResource ) const;

返回值: 如果成功,为一个光标句柄;否则为NULL。

参数:

lpszResourceName 指向包含光标资源名称的以null结尾的字符串指针。你可以 为该参数
使用CString对象。

nIDResource 光标资源的ID号码。

备注:

加载以lpszResourceName为名或在当前可执行文件中指定的nIDResource光标资源。LoadC
ursor仅在该光标先前没有被加载过时才可将它调入内存;否则,它取得已存在(内存中)的
资源句柄。

LoadStandardCursor或LoadOEMCursor成员函数被用来访问预定义的Windows光标。

例子:

HCURSOR hCursor;

//加载一个光标资源,它最初由图形编辑器创建并分配了ID号IDC_MYCURSOR。

hCursor = AfxGetApp()->LoadCursor(IDC_MYCURSOR);

14、LoadStandardCursor

加载Windows预定义的光标,其IDC_常量在WINDOWS.H中指定。

HCURSOR LoadStandardCursor( LPCTSTR lpszCursorName ) const;

返回值: 如果成功,为一个光标句柄;否则为NULL。

参数:

lpszCursorName 一个IDC_列表单,它包含指定的Windows预定义光标标识符。这些标识符
定义在WINDOWS.H中。下面列出这些标识符及其含义:

IDC_ARROW 标准的箭头光标

IDC_IBEAM 标准的文本插入光标

IDC_WAIT 沙漏光标

IDC_CROSS 用于精度选择的十字光标

IDC_UPARROW 向上指的箭头

IDC_SIZE 废弃的;使用IDC_SIZEALL

IDC_SIZEALL 四向箭头。用来重设窗口大小。

IDC_ICON 废弃的;使用IDC_ARROW.

IDC_SIZENWSE 左上右下双向箭头

IDC_SIZENESW 右上左下双向箭头

IDC_SIZEWE 水平双向箭头

IDC_SIZENS 垂直双向箭头

备注:

LoadStandardCursor或LoadOEMCursor成员函数被用来访问预定义的Windows光标。

例子:

HCURSOR hCursor;

//加载Windows预定义的"上指"光标

hCursor = AfxGetApp()->LoadStandardCursor(IDC_UPARROW);

15、LoadOEMCursor

加载Windows OEM预定义光标,其OCR_常量在WINDOWS.H中指定。

HCURSOR LoadOEMCursor( UINT nIDCursor ) const;

返回值: 如果成功,为一个光标句柄;否则为NULL。

参数:

nIDCursor 一个OCR_列表单,它包含指定的Windows预定义光标标识符。你必须在“#incl
ude <afxwin.h>”之前放置“#define OEMRESOURCE”来获得在WINDOWS.H中的OCR_常量的
访问权。

备注:

加载由nIDCursor指定的Windows预定义光标资源。LoadStandardCursor或LoadOEMCursor成
员函数被用来访问预定义的Windows光标。

例子:

//在stdafx.h文件中添加#define OEMRESOURCE来包含

//在windows.h中定义的OCR_值。

#define OEMRESOURCE

#include <afxwin.h> // MFC核心及标准元件

#include <afxext.h> // MFC扩展(包括VB)

HCURSOR hCursor;

// Load the predefined WIndows "size all" cursor.

hCursor = AfxGetApp()->LoadOEMCursor(OCR_SIZEALL);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值