VC用法总结108个常用示例Word格式文档下载.docx

上传人:b****6 文档编号:21106621 上传时间:2023-01-27 格式:DOCX 页数:48 大小:52.84KB
下载 相关 举报
VC用法总结108个常用示例Word格式文档下载.docx_第1页
第1页 / 共48页
VC用法总结108个常用示例Word格式文档下载.docx_第2页
第2页 / 共48页
VC用法总结108个常用示例Word格式文档下载.docx_第3页
第3页 / 共48页
VC用法总结108个常用示例Word格式文档下载.docx_第4页
第4页 / 共48页
VC用法总结108个常用示例Word格式文档下载.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

VC用法总结108个常用示例Word格式文档下载.docx

《VC用法总结108个常用示例Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《VC用法总结108个常用示例Word格式文档下载.docx(48页珍藏版)》请在冰豆网上搜索。

VC用法总结108个常用示例Word格式文档下载.docx

17

(35)如何在对话框中显示一个位图17

(36)如何改变对话或窗体视窗的背景颜色17

(37)如何获取一个对话控件的指针18

(38)如何禁止和使能控件19

(39)如何改变控件的字体19

(40)如何在OLE控件中使用OLE_COLOR数据类型19

(41)在不使用通用文件打开对话的情况下如何显示一个文件列表20

(42)为什么旋转按钮控件看起来倒转20

(43)为什么旋转按钮控件不能自动地更新它下面的编辑控件20

(44)如何用位图显示下压按钮20

(45)如何一个创建三态下压按钮21

(46)如何动态创建控件21

(47)如何限制编辑框中的准许字符21

(48)如何改变控件的颜色22

(49)当向列表框中添加多个项时如何防止闪烁23

(50)如何向编辑控件中添加文本24

(51)如何访问预定义的GDI对象24

(52)如何获取GDI对象的属性信息25

(53)如何实现一个橡皮区矩形25

(54)如何更新翻转背景颜色的文本27

(55)如何创建一个具有特定点大小的字体27

(56)如何计算一个串的大小27

(57)如何显示旋转文本28

(58)如何正确显示包含标签字符的串29

(59)如何快速地格式化一个CString对象29

(60)串太长时如何在其末尾显示一个省略号30

(61)为什么即使调用EnableMenuItem菜单项后,菜单项还处于禁止状态30

(62)如何给系统菜单添加一个菜单项30

(63)如何确定顶层菜单所占据的菜单行数31

(64)在用户环境中如何确定系统显示元素的颜色32

(65)如何查询和设置系统参数32

(66)如何确定当前屏幕分辨率32

(67)如何使用一个预定义的Windows光标32

(68)如何检索原先的TaskManager应用程序使用的任务列表33

(69)如何确定Windows和Windows系统目录33

(70)在哪儿创建临文件34

(71)我怎样才能建立一个等待光标?

35

(72)我在MDI框架中有个 

form 

视窗。

它有个取消按钮,我需要当用户按取消按钮时可关闭form视窗。

我应该如何关闭该文档?

(73)如何访问桌面窗口35

(74)什么是COLORREF?

 

我该怎样用它?

(75)AppWizard所产生的STDAFX文件是干什么用的?

36

(76)我在我的程序中是了CDWordArray。

我向它添加了约10,000个整数,这使得它变得非常非常慢。

为什么会这么糟?

(77)我该如何改变MDI框架窗口的子窗口的大小以使在窗口以一定的大小打开?

(78)在我的程序的某些部分,我可以调用 

MessageBox 

函数来建立一个信息对话框,例如在视类中。

但是,在其它部分我却不能,如文档类中。

为什么?

我怎样才能在我的应用程序类中建立一个信息对话框?

(79)我需要在我的程序中设置全局变量,以使文档中的所有类都能访问。

我应该吧它放到哪儿?

(80)我听说MFC可以发现内存漏洞,我怎样使用该特性?

(81)我怎样才能在我的应用程序中循环浏览已经打开的文档?

37

(82)才能在我的应用程序中循环浏览已经打开的视?

(83)函数PreCreateWindow是干什么用的?

(84)该怎样防止MFC在窗口标题栏上把文档名预置成应用程序名?

(85)我应该怎样防止MFC在窗口标题栏上添加文档名?

(86)我应该如何改变视窗口的大小?

(87)我有一无模式对话框。

我怎样才能在窗口退出时删除CDialog对象?

(88)为什么把“deletethis”放在PostNcDestroy中而不是OnNcDestroy?

(89)File菜单中的MRU列表是从哪儿来的?

列表中的名字放在哪儿了?

我怎样才能改变列表中项目的最大值?

(90)我在菜单中添加了新的项。

但是,当我选该项时,在状态栏上没有出现任何提示信息。

为什么?

(91)我怎样才能在应用程序的缺省系统菜单中加上一些东西?

38

(92)我建立了一个对话框。

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

我怎样才能使第一个编辑框在对话框打开时就获得焦点?

(93)我怎样才能使一个窗口具有“alwaysontop”特性?

(94)我要为我的formview添加文档模板。

我先建立了对话框模板,然后使用ClassWizard建立了基于CFormView的新类,它也是从CDocument继承来的。

我还建立了相应的资源并在InitInstance中添加了新的文档模板。

但是,当我试图运行该程序时,出现了Assertion信息。

(95)我在一对话框中有一列表框,我需要tabbed列表框中的项目。

但是,当我处理含有tab字符(用AddString添加的)的列表项时,tab被显示成小黑块而没有展开。

哪儿出错了?

(96)我建立了一个应用程序,并使用了CRecordset类。

但是,当我运行该程序时,它试图要访问数据库,并给出“InternalApplicationError”对话框。

我应该怎样做?

(97)我用ClassWizard建立了一个类。

但是,我把名字取错了,我想把它从项目中删除,应该如何做?

39

(98)当我打开应用程序中的窗口时,我要传递该窗口的矩形尺寸。

该矩形指定了窗口的外围大小,但是当我调用GetClientRect时,所得到的尺寸要比所希望的值要小(因为工具栏和窗口边框的缘故)。

有其它方法来计算窗口的尺寸吗?

(99)我在文档类中设置了一个整型变量。

但是,当我试图把该变量写入Serialize函数中的archive文件中时,出现了类型错误。

而文档中的其它变量没有问题。

(100)如何控制菜单的大小?

(101)改变LVIS_SELECTED的状态颜色?

40

(102)如何只存储文档的某一部分?

(103)保存工具条菜单有bug吗?

(104)Tipoftheday的bug40

(105)如何可以让我的程序可以显示在其它的窗口上面?

41

(106)如何控制窗口框架的最大最小尺寸?

42

(107)如何改变窗口框架的颜色?

(108)如何将应用程序窗口置于屏幕正中?

43

主窗口的指针保存在CWinThread:

:

m_pMainWnd中,调用AfxGetMainWnd实现。

AfxGetMainWnd()->

ShowWindow(SW_SHOWMAXMIZED)

//使程序最大化.

(2)确定应用程序的路径

UseGetModuleFileName 

获得应用程序的路径,然后去掉可执行文件名。

Example:

TCHAR

exeFullPath[MAX_PATH]//MAX_PATH在API中定义了吧,好象是

128

GetModuleFileName(NULL,exeFullPath,MAX_PATH)

两种方法:

(1)SDK函数 

SHGetFileInfo 

或使用 

ExtractIcon获得图标资源的 

handle,

(2)SDK函数 

获得有关文件的很多信息,如大小图标,属性, 

类型等.

Example

(1):

在程序窗口左上角显示 

NotePad图标.

voidCSampleView:

OnDraw(CDC*pDC)

{

if(:

SHGetFileInfo(_T("

c:

"

pwin95"

notepad.exe"

),0,

&

stFileInfo,sizeof(stFileInfo),SHGFI_ICON))

pDC->

DrawIcon(10,10,stFileInfo.hIcon)

}

Example

(2):

同样功能,UseExtractIconFunction

OnDraw(CDC*pDC)

HICONhIcon=:

ExtractIcon(AfxGetInstanceHandle(),_T

("

NotePad.exe"

),0)

if(hIcon&

hIcon!

=(HICON)-1)

pDC->

DrawIcon(10,10,hIcon)

说明:

获得notepad.exe的路径正规上来说用GetWindowsDirectory函数得到, 

如果是调用 

win95下的画笔,应该用访问注册表的方法获得其路径,要作成一个比较考究的程序,考虑应该全面点.

(4)获得各种目录信息

Windows目录:

Use"

GetWindowsDirectory"

Windows下的system目录:

GetSystemDirectory"

temp目录:

GetTempPath"

当前目录:

GetCurrentDirectory"

请注意前两个函数的第一个参数为目录变量名,后一个为缓冲区后两个相反.

(5)如何自定义消息

1) 

手工定义消息,可以这么写

#defineWM_MY_MESSAGE(WM_USER+100),

MS 

推荐的至少是 

WM_USER+100

(2)写消息处理函数,用

WPARAM,LPARAM返回LRESULT.

LRESULTCMainFrame:

OnMyMessage(WPARAMwparam,LPARAMlParam)

//加入你的处理函数 

irectory"

向窗口发送 

WM_SECTION消息。

HICONhIcon=AfxGetApp()->

LoadIcon(IDI_ICON)

ASSERT(hIcon)

SendMessage(WM_SECTION,TRUE,(LPARAM)hIcon)

重载 

CWnd:

PreCreateWindow 

并修改CREATESTRUCT结构来指定窗口风格和其他创建信息.

Delete"

Max"

ButtonandSetOriginal

Window'

sPositionandSize

BOOLCMainFrame:

PreCreateWindow

(CREATESTRUCT&

cs)

cs.style&

=~WS_MAXINIZEMOX

cs.x=cs.y=0

cs.cx=GetSystemMetrics(SM_CXSCREEN/2)

cs.cy=GetSystemMetrics(SM_CYSCREEN/2)

returnCMDIFramewnd:

PreCreateWindow(cs)

CallFunctionCWnd:

CenterWindows

CenterWindow()//Relativetoit'

sparent

//Relative

toScreen

CenterWindow(CWnd:

GetDesktopWindow())

//Relativeto

Application'

sMainWindow

AfxGetMainWnd()->

CenterWindow()

先说窗口。

在 

InitStance 

函数中设定 

m_nCmdShow的取值.

m_nCmdShow=SW_SHOWMAXMIZED//最大化

m_nCmdShow=SW_SHOWMINMIZED//最小化

m_nCmdShow=SW_SHOWNORMAL//正常方式

MDI窗口:

如果是创建新的应用程序,可以用MFCAppWizard 

的Advanced 

按钮并在MDI子窗口风格组中检测最大化或最小化还可以重载 

MDIWindow 

的PreCreateWindow函数,设置WS_MAXMIZEorWS_MINMIZE

如果从 

CMDIChildWnd派生,调用 

OnInitialUpdate函数中的 

ShowWindow来指定 

MDIChildWindow的风格。

也就是 

FixedDialog形式。

Windows发送 

WM_GETMAXMININFO消息来跟踪, 

响应它,在 

OnGetMAXMININFO 

中写代码:

很简单,用SW_HIDE 

隐藏窗口,可以结合 

FindWindow,ShowWindow控制.

(12)如何创建一个字回绕的CEditView

重载CWnd:

:

PreCreateWindow和修改CREATESTRUCT结构,关闭CEditView对象的ES_AUTOHSCROLL和WS_HSCROLL风格位,由于CEditView:

PreCreateWindow显示设置cs.style,调用基类函数后要修改cs.style。

BOOLCSampleEDitView:

PreCreateWindow(CREATESTRUCT&

//Firstcallbasseclassfunction.

BOOLbResutl=CEditView:

PreCreateWindow(cs)

//Nowspecifythenewwindowstyle.

=~(ES_AUTOHSCROLL 

|WS_HSCROLL)

returnbResult

这么办:

在恢复程序窗体大小时,Windows会发送WM_QUERY-OPEN消息,用 

ClassWizard设置成员函数

OnQueryOpen(),addfollowingcode:

BoolCMainFrame:

OnQueryOpen()

Returnfalse

(14)移动窗口

调用CWnd:

SetWindowPos并指定SWP_NOSIZE标志。

目的位置与父窗口有关(顶层窗口与屏幕有关)。

MoveWindow时必须要指定窗口的大小。

//Movewindowtopositoin100,100ofitsparentwindow.

SetWindowPos(NULL,100,100,0,0,SWP_NOSIZE 

|SWP_NOAORDER)

(15)通用控件的显示窗口

MFC提供了几个CView派生的视窗类,封装了通用控件的功能,但仍然使用工作框文档显示窗口体系结构:

CEditView封装了编辑控件,CTreeView保持了树列表控件,CListView封装了列表显示窗口控件,CRichEditView可以处理多种编辑控件。

(16)重置窗口的大小

调用CWnd:

SetWindowPos并指定SWP_NOMOVE标志,也可调用CWnd:

MoveWindow 

但必须指定窗口的位置。

//Getthesizeofthewindow.

CrectreWindow

GetWindowRect(reWindow)

//Makethewindowtwiceaswideandtwiceastall.

SetWindowPos(NULL,0,0,reWindow.Width()*2,

reWindow.Height()*2,

SWP_NOMOVE 

|SWP_NOZORDER)

(17)如何单击除了窗口标题栏以外的区域使窗口移动

当窗口需要确定鼠标位置时Windows向窗口发送WM_NCHITTEST信息,可以处理该信息使Windows认为鼠标在窗口标题上。

对于对话框和基于对话的应用程序,可以使用ClassWizard处理该信息并调用基类函数,如果函数返回HTCLIENT 

则表明鼠标在客房区域,返回HTCAPTION表明鼠标在Windows的标题栏中。

UINTCSampleDialog:

OnNcHitTest(Cpointpoint)

UINTnHitTest=Cdialog:

OnNcHitTest(point)

return(nHitTest==HTCLIENT)?

HTCAPTION:

nHitTest

上述技术有两点不利之处,

其一是在窗口的客户区域双击时,窗口将极大;

其二,它不适合包含几个视窗的主框窗口。

还有一种方法,当用户按下鼠标左键使主框窗口认为鼠标在其窗口标题上,使用ClassWizard在视窗中处理WM_LBUTTODOWN信息并向主框窗口发送一个WM_NCLBUTTONDOWN信息和一个单击测试HTCAPTION。

voidCSampleView:

OnLButtonDown(UINTnFlags,Cpointpoint

CView:

OnLButtonDow(nFlags,pont)

//Foolframewindowintothinkingsomeneclicked

on

itscaptionbar.

GetParentFrame()—>

PostMessage(

WM_NCLBUTTONDOWN,

HTCAPTION,MAKELPARAM(poitn.x,point.y))

该技术也适用于对话框和基于对的应用程序,只是不必调用

GetParentFrame 

voidCSampleDialog:

OnLbuttonDown(UINTnFlags,Cpointpoint)

Cdialog:

OnLButtonDow(nFlags,goint)

//Fooldialogintothinkingsimeoneclickedonits

captionbar.

PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARM(point.x

point.y

))

(18)如何改变视窗的背景颜色

Windows向窗口发送一个WM_ERASEBKGND消息通知该窗口擦除背景,可以使用ClassWizard重载该消息的缺省处理程序来擦除背景(实际是画),并返回TRUE以防止Windows擦除窗口。

//Paintareathatneedstobeerased.

BOOLCSampleView:

OnEraseBkgnd(CDC*pDC)

//Createapruplebrush.

CBrushBrush(RGB(128,0,128))

//Selectthebrushintothedevicecontext.

CBrush*pOldBrush=pDC—>

SelcetObject(&

brush)

//Gettheareathatneedstobeerased.

CRectreClip

pDC—>

GetCilpBox(&

rcClip)

//Paintthearea.

PatBlt(rcClip.left,rcClip.top,rcClip.Width(),rcClip.Height(),PATCOPY)

//Unselectbrushoutofdevicecontext.

SelectObject(pOldBrush)

//Returnnonzerotohalffrutherprocessing.

returnTRUE

(19)如何改变窗口标题

SetWindowText可以改变任何窗口(包括控件)的标题。

//Settitleforapplication'

smainframewindow.

AfxGetMainWnd()—>

SetWindowText(_T("

Applicationtitle"

//SettitleforView'

sMDIchildframewindow.

SetWindowText("

_T("

MDIChildFramenewtitle"

//Settitlefordialog'

spushbuttoncontrol.

GetDigitem(IDC_BUTTON)—>

SetWindowText(_T("

Buttonnewtitle"

如果需要经常修改窗口的标题(注:

控件也是窗口),应该考虑使用半文档化的函数AfxSetWindowText。

该函数在AFXPRIV.H中说明,在WINUT

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1