⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vc5.txt

📁 提供100多种VC++操作的方法。很好的。
💻 TXT
📖 第 1 页 / 共 3 页
字号:
(66)如何确定当前屏幕分辨率
调用SDK函数GetSystemMetrics,该函数可以检索有关windows显示信息,诸如标题大小、边界大小以及滚动条大小等等。

//Initialize CSize object with screen size.
CSize sizeScreen (GetSystemMetrics (SM_CXSCREEN),
GetSystemMetrics (SM_CYSCREEN))

(67)如何使用一个预定义的Windows光标
调用CWinApp:: LoadStandardCursor并传送光标标识符。
BOOL CSampleDialog:: OnSetCursor (CWnd* pWnd,
UINT nHitTest, UINT
message)
{
//Display wait cursor if busy.
if (m_bBusy)
{
SetCursor (AfxGetApp () ->LoadStandardCursor (IDC_WAIT))
return TRUE
}

return CDialog:: OnSetCursor (pWnd. nHitTest,message)
}

(68)如何检索原先的Task Manager应用程序使用的任务列表
原先的Task Manager应用程序显示顶层窗口的列表。为了显示该列表,窗口必须可见、包含一个标题以及不能被其他窗口拥有。调

用CWnd:: GetWindow可以检索顶层窗口的列表,调用IsWindowVisible、GetWindowTextLength以及GetOwner可以确定窗口是否应该

在列表中。下例将把TaskManager窗口的标题填充到列表中。

void GetTadkList (CListBox&list)
{
CString strCaption
//Caption of window.

list.ResetContent ()
//Clear list box.

//Get first Window in window list.
ASSERT_VALID (AfxGetMainWnd ())
CWnd* pWnd=AfxGetMainWnd () ->GetWindow (GW_HWNDFIRST)

//Walk window list.
while (pWnd)
{
// I window visible, has a caption, and does not have an owner?
if (pWnd ->IsWindowVisible()
&& pWnd ->GetWindowTextLength ()
&&! pWnd ->GetOwner ())
{

//Add caption o window to list box.

pWnd ->GetWindowText (strCaption)

list.AddString (strCaption)
}
//Get next window in window list.
pWnd=pWnd ->GetWindow(GW_HWNDNEXT)
}
}

(69)如何确定Windows和Windows系统目录
有两个SDK函数可以完成该功能。GetWindowsDirectory和GetSystemDirectory,下例说明了如何使用这两个函数:

TCHAR szDir [MAX_PATH]
//Get the full path of the windows directory.
∶ : GetWindowsDirectory (szDir, MAX_PATH)
TRACE ("Windows directory %s"n", szDir)
//Get the full path of the windows system directory.
∶ : GetSystemDirectory (szDir, MAX_PATH)
TRACE ("Windows system directory %s"n", szDir)

(70)在哪儿创建临文件
调用SDK函数GetTemPath可以确定临时文件的目录,该函数首先为临时路径检测TMP环境变量:如果没有指定TMP,检测TMP环境变量

//get unique temporary file.
CString strFile
GetUniqueTempName (strFile)
TRY
{
//Create file and write data.Note that file is closed
//in the destructor of the CFile object.
CFile file (strFile,CFile ::modeCreate | CFile:: modeWrite)

//write data
}

CATCH (CFileException, e)
{
//error opening file
}
END_CATCH

Void GetuniqueTempName (CString& strTempName)
{
//Get the temporary files directory.
TCHAR szTempPath [MAX_PATH]
DWORD dwResult=:: GetTempPath (MAX_PATH, szTempPath)
ASSERT (dwResult)

//Create a unique temporary file.
TCHAR szTempFile [MAX_PATH]
UINT nResult=GetTempFileName (szTempPath, _T ("~ex"),0,szTempfile)
ASSERT (nResult)

strTempName=szTempFile
}

(71)我怎样才能建立一个等待光标?
调用 BeginWaitCursor 函数来启动等待光标,调用 EndWaitCursor 函数来结束等待光标。要注意,二者都要调用 app 的成员函

数,如下所示:

    AfxGetApp()->BeginWaitCursor();
    // 要做的事
    AfxGetApp()->EndWaitCursor();

(72)我在MDI框架中有个 form 视窗。它有个取消按钮,我需要当用户按取消按钮时可关闭form视窗。我应该如何关闭该文档?
调用 OnCloseDocument 函数。

(73)如何访问桌面窗口
静态函数CWnd:: GetDesktopWindow 返回桌面窗口的指针。下例说明了MFC函数CFrameWnd::BeginModalStae是如何使用该函数进入

内部窗口列表的。

void CFrameWnd::BeginModalState ()
{
//first count all windows that need to be disabled
UINT nCount=0
HWND hWnd= :: GetWindow (:: GetDesktopWindow(), GW_CHILD)
while (hWnd!=NULL)
{
if (:: IsWindowEnabled (hwnd)
&& CWnd::FromHandlePermanent (hWnd)!=NULL
&& AfxIsDescendant (pParent->m_hWnd, hWnd)
&& :: SendMessage (hWnd, WM_DISABLEMODAL, 0, 0)==0)
{
++nCount
}
hWnd=:: GetWindow (hWnd, GW_HWNDNEXT)
}

(74)什么是COLORREF? 我该怎样用它?
COLORREF是一个32-bit整型数值,它代表了一种颜色。你可以使用RGB函数来初始化COLORREF。例如:

    COLORREF color = RGB(0, 255, 0);
RGB函数接收三个0-255数值,一个代表红色,一个代表绿色,一个代表蓝色。在上面的例子中,红色和蓝色值都为0,所以在该颜

色中没有红色和蓝色。绿色为最大值255。所以该颜色为绿色。0,0,0为黑色,255,255,255 为白色。

另一种初始化COLORREF的方法如下所示:

    CColorDialog colorDialog;
    COLORREF color;

 if( colorDialog.DoModal() == IDOK )
    {
        color = colorDialog.GetColor();
    }
这段代码使用了MFC中的颜色对话框,它需要文件。

(75)AppWizard所产生的STDAFX文件是干什么用的?
它主要是协助产生预编译头文件的。通常你是不需要修改它的。

(76)我在我的程序中是了CDWordArray。我向它添加了约10,000个整数,这使得它变得非常非常慢。为什么会这么糟?
CDWordArray是很好用的,只是因为你没有指定数组的最大尺寸。因此,当你添加新元素时,该类会从堆中重新分配空间。不幸的

是,该类会在每次插入新元素时都为数组重新分配空间。如果你向它添加了很多新元素,所有这些分配和复制数组的操作会就会使

它变慢。解决该问题的方法是,你可以使用SetSize函数的第二个参数来改变这种重新分配的频率。例如,如果你把该参数设置为

500,则每次数组空间超出时它才重新分配并添加500个新空间,而不是1 个。这样一来,你就可以不用重新分配而添加了另外499

个元素空间,这也会大大提高程序的运行速度。

(77)我该如何改变MDI框架窗口的子窗口的大小以使在窗口以一定的大小打开?
在视中的OnInitialUpdate函数中调用GetParentFrame函数。GetParentFrame会返回一指向一保存有该视的框架窗口的指针。然后

调用在框架窗口上调用MoveWindow。

(78)在我的程序的某些部分,我可以调用 MessageBox 函数来建立一个信息对话框,例如在视类中。但是,在其它部分我却不能

,如文档类中。为什么?我怎样才能在我的应用程序类中建立一个信息对话框?
MessageBox函数来自CWnd 类,所以你只能在从CWnd继承的类(如CView )中调用它。但是,MFC也提供了AfxMessageBox函数,你可

以在任何地方调用它。

(79)我需要在我的程序中设置全局变量,以使文档中的所有类都能访问。我应该吧它放到哪儿?
把该变量放到该应用程序类的头文件中的attribute处。然后,在程序的任何地方,你都可以用下面的方法来访问该变量:

    CMyApp *app = (CMyApp *)AfxGetApp();
    app->MyGlobalVariable = ...

(80)我听说MFC可以发现内存漏洞,我怎样使用该特性?
如果你在Debug菜单中的Go选项(不是Project菜单中的Execute选项)来运行你的应用程序,MFC 应该在程序终止时报告内存漏洞。

如果没有,那么试试运行MFC Tracer工具程序(在VC++程序组中),并启动跟踪。然后返回应用程序。

(81)我怎样才能在我的应用程序中循环浏览已经打开的文档?
使用CDocTemplate中未公开的GetFirstDocPosition()和GetNextDoc()函数。

(82)才能在我的应用程序中循环浏览已经打开的视?
使用CDocument 中未公开的GetFirstViewPosition() 和GetNextView() 函数。

(83)函数PreCreateWindow是干什么用的?
PreCreateWindow允许你在调用 CreateWindow 之前来改变窗口属性。

(84)该怎样防止MFC在窗口标题栏上把文档名预置成应用程序名?
在PreCreateWindow函数中删除FWS_PREFIXTITLE标志的窗口样式:

    cs.style &= ~FWS_PREFIXTITLE;

(85)我应该怎样防止MFC在窗口标题栏上添加文档名?
在PreCreateWindow函数中删除FWS_ADDTOTITLE 标志的窗口样式:

    cs.style &= ~FWS_ADDTOTITLE ;

(86)我应该如何改变视窗口的大小?
因为视窗口实际上是框架窗口的子窗口,所以你必须改变框架窗口的大小,而不是改变视窗口。使用CView类中的GetParentFrame

()函数获得指向框架窗口的指针,然后调用MoveWindow()函数来改变框架的大小。这会使变尺寸的视充满框架窗口。

(87)我有一无模式对话框。我怎样才能在窗口退出时删除CDialog对象?
把“delete this”加到PostNcDestroy中。这主要用在需要自动删除对象的场合。

(88)为什么把“delete this”放在PostNcDestroy中而不是OnNcDestroy?
OnNcDestroy只被已建立的窗口调用。如果建立窗口失败(如PreCreateWindow ),则没有窗口处来发送WM_NCDESTROY消息。

PostNcDestroy是在对象窗口被完全删除,在OnNcDestroy后,甚至在窗口建立失败之后调用的。

(89)File菜单中的MRU列表是从哪儿来的?列表中的名字放在哪儿了?我怎样才能改变列表中项目的最大值?
在应用程序类的InitInstance函数中对LoadStdProfileSettings的调用中。该调用接受一个参数(在缺省情况下如果没有传递值则

为4 )。MRU文件名是从INI文件中调用的。如果你有带有ID_FILE_MRU_FILE1的ID的菜单选项,它会为调入的MRU列表所替换。如果

你改变传递给 LoadStdProfileSettings的数值(最大为16 ),则你就改变了所装如文件名的最大值。

(90)我在菜单中添加了新的项。但是,当我选该项时,在状态栏上没有出现任何提示信息。为什么?
打开资源文件中的菜单模板。打开新菜单选项的属性对话框。在对话框的底部的Prompt 编辑框中,你可以如下指定状态栏上的提

示信息和工具栏上的提示信息(如果你已经建立的工具栏按钮):

    Status bar string"nFlying tag

(91)我怎样才能在应用程序的缺省系统菜单中加上一些东西?
系统菜单与其它菜单类似,你可以添加或删除项目,这需要使用CMenu类的成员函数。下面的代码在你的系统菜单后面添加一个新

菜单项:

    CMenu *sysmenu;
    sysmenu = m_pMainWnd->GetSystemMenu(FALSE);
    sysmenu->AppendMenu(MF_STRING, 1000, "xxx");
参见MFC帮助文件中的CMenu 类。

(92)我建立了一个对话框。但是当我显示该对话框时,第一个编辑框总是不能获得焦点,我必须单击它来使它获得焦点。我怎样

才能使第一个编辑框在对话框打开时就获得焦点?
打开资源编辑器中的对话框模板。在Layout菜单中选择Tab Order 选项。按你的需求单击对话框中的控制来重新排列这些控制的

tab顺序。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -