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

📄 control.htm#1

📁 VC的一些技巧性文档
💻 HTM#1
📖 第 1 页 / 共 3 页
字号:
<html><style type="text/css"><!--.p9 {  font-family: "宋体"; font-size: 9pt}a        {text-transform: none; text-decoration: none;}a:hover {text-decoration: underline; color: #FF0000;}--></style><body background="di2001.jpg"><h3 align="center"><font COLOR="#AOAO99">控制</font></h3><table width="100%"><tr><td><font color="0000FF"><a name="1">如何创建一个字回绕的CEditView </a></font></td></tr><tr><td><p></Br>重载CWnd : : PreCreateWindow和修改CREATESTRUCT结构,关闭CEditView对象的ES_AUTOHSCROLL和WS_HSCROLL风格位,由于CEditView : : PreCreateWindow显示设置cs. style,调用基类函数后要修改cs . style。<Br></Br>BOOL CSampleEDitView : : PreCreateWindow (CREATESTRUCT&cs)<Br></Br>{<Br></Br>//First call basse class function .<Br></Br>BOOL bResutl =CEditView : : PreCreateWindow (cs) ;<Br></Br>// Now specify the new window style .<Br></Br>cs.style &= ~ (ES_AUTOHSCROLL |WS_HSCROLL);<Br></Br>return bResult ;<Br></Br>}<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="2">通用控件的显示窗口 </a></font></td></tr><tr><td><p></Br>MFC提供了几个CView派生的视窗类,封装了通用控件的功能,但仍然使用工<Br></Br>作框文档显示窗口体系结构:CEditView封装了编辑控件,CTreeView保持了树列表<Br></Br>控件,CListView封装了列表显示窗口控件,CRichEditView可以处理多种编辑控件。<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="3">如何禁止和使能控件 </a></font></td></tr><tr><td><p></Br>控件也是窗口,所以可以调用CWnd : : EnableWindow使能和禁止控件。<Br></Br>//Disable button controls .<Br></Br>m_wndOK.EnableWindow (FALSE ) ;<Br></Br>m_wndApply.EnableWindow (FALSE ) ;<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="4">如何在OLE控件中使用OLE_COLOR数据类型 </a></font></td></tr><tr><td><p></Br>诸如COleControl : : GetFortColor和COleControl : : GetBackColor等函数返回OLE _COLOR数据类型的颜色,而GDI对象诸如笔和刷子使用的是COLORREF数据类型,调用COleControl : : TranslateColor可以很容易地将OLE_COLOR类型改为COLORREF类型。下例创建了一个当前背景颜色的刷子:<Br></Br>void CSampleControl : : OnDraw (CDC* pdc<Br></Br>const Crect& rcBounds , const Crect& rcInvalid )<Br></Br>{<Br></Br>//Create a brush of the cuttent background color .<Br></Br>CBrush brushBack (TranslateColor (GetBackColor ( ) ) );<Br></Br>//Paint the background using the current background color .<Br></Br>pdc—> FilllRect (rcBounds , &brushBack) ;<Br></Br>//other drawign commands<Br></Br>…<Br></Br>}<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="5">在不使用通用文件打开对话的情况下如何显示一个文件列表 </a></font></td></tr><tr><td><p></Br>调用CWnd: : DlgDirList或者CWnd: : DlgDirListComboBox, Windows 将自动地向列表框或组合框填充可用的驱动器名或者指定目录中的文件,下例将Windows目录中的文件填充在组合框中:<Br></Br>BOOL CSampleDig : : OnInitDialog ( )<Br></Br>{<Br></Br>CDialog : : OnInitDialog ( )<Br></Br>TCHAR szPath [MAX_PATH] = {"c:\\windows"} ;<Br></Br>int nReslt = DlgDirListComboBox (szPath , IDC_COMBO , IDC_CURIDIR,<Br></Br>DDL_READWRITE |DDL_READONLY|DDL_HIDDEN|<Br></Br>DDL_SYSTEM|DDL_ARCHIVE ) ;<Br></Br>return TRUE ;<Br></Br>}<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="6">为什么旋转按钮控件看起来倒转 </a></font></td></tr><tr><td><p></Br>需要调用CSpinCtrl : : SetRange 设置旋转按钮控件的范围,旋转按钮控件的缺省上限为0,缺省下限为100,这意味着增加时旋转按控件的值由100变为0。下例将旋转按钮控件的范围设置为0到100:<Br></Br>BOOL CAboutDlg : : OnInitDialog ( )<Br></Br>{<Br></Br>CDialog : : OnInitDialog ( )<Br></Br>//set the lower and upper limit of the spin button<Br></Br>m_wndSpin . SetRange ( 0 ,100 ) ;<Br></Br>return TRUE ;<Br></Br>}<Br></Br>Visual C++ 4.0 Print对话中的Copise旋转按钮控件也有同样的问题:按下Up按钮时拷贝的数目减少,而按下Down 按钮时拷贝的数目增加。<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="7">为什么旋转按钮控件不能自动地更新它下面的编辑控件 </a></font></td></tr><tr><td><p></Br>如果使用旋转按钮的autu buddy特性, 则必须保证在对话的标记顺序中buddy窗口优先于旋转按钮控件。从Layout菜单中选择Tab Order菜单项(或者按下Crtl+D)可以设置对话的标签顺序。<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="8">如何动态创建控件 </a></font></td></tr><tr><td><p></Br>分配一个控件对象的实例并调用其Create成员函数。开发者最容易忽略两件事:忘记指定WS_VISBLE标签和在栈中分配控件对象。下例动态地创建一个下压按钮控件:<Br></Br>//In class declaration (.H file ).<Br></Br>private :<Br></Br>CButton* m _pButton ;<Br></Br>//In class implementation (.cpp file ) .<Br></Br>m_pButton =new CButton ;<Br></Br>ASSERT_VALID (m_pButton);<Br></Br>m_pButton —>Create (_T ("Button Title ") , WS_CHILD |WS_VISIBLE |BS_PUSHBUTTON.<Br></Br>Crect ( 0, 0, 100 , 24) , this , IDC _MYBUTTON )<Br></Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="9">如何显示旋转文本 </a></font></td></tr><tr><td><p></Br>只要用户使用TrueType或者GDI笔或字体就可以显示旋转文本(有些硬件设备也支持旋转光栅字体)。LOGFONT结构中的ifEscapement成员指定了文本行和x轴的角度,角度的单位是十分之一度而不是度,例如,ifEscapement为450表示字体旋转45度。为确保所有的字体沿坐标系统的同一方向旋转,一定要设置ifEscapement成员的CLIP_LH_ANGLES位,否则,有些字体可能反向旋转。下例使用了14点Arial字体每间隔15度画一个串。<Br></Br>void CSampleView:: OnDraw (CDC* pDC)<Br></Br>{<Br></Br>//Determine the size of the window.<Br></Br>CRect rcClient;<Br></Br>GetClientRect (rcClient);<Br></Br>//Create sample string.<Br></Br>CString str (_T ("Wheeee...I am rotating!"));<Br></Br>//Draw transparent, red text.<Br></Br>pDC->SetBkMode (TRANSPARENT);<Br></Br>pDC->SetTextColor (RGB (255,0,0));<Br></Br>CFont font; //font object<Br></Br>LOGFONT stFont; //font definition<Br></Br>//Set font attributes that will not change.<Br></Br>memset (&stFont, 0, sizeof (LOGFONT));<Br></Br>stFont.ifheight=MulDiv (14, -pDC->GetDeviceCaps (LOGPIXELSY), 72);<Br></Br>stFont.ifWeight=FW_NORMAL;<Br></Br>stFont.ifClipPrecision=LCIP_LH_ANGLES;<Br></Br>strcpy (stFont.lfFaceName, "Arial");<Br></Br>//Draw text at 15degree intervals.<Br></Br>for (int nAngle=0; nAngle<3600; nAngle+=150)<Br></Br>{<Br></Br>//Specify new angle.<Br></Br>stFont.lfEscapement=nAngle;<Br></Br>//Create and select font into dc.<Br></Br>font.CreateFontIndirect (&stfont);<Br></Br>CFont* pOldFont=pDC->SelectObject (&font);<Br></Br>//Draw the text.<Br></Br>pDC->SelectObject (pOldFont);<Br></Br>font.DelectObjext ();<Br></Br>}<Br></Br>}<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="10">如何让TOOLTIP的字体变大 </a></font></td></tr><tr><td><p></Br>前几天有个虫虫问如何让vc4.0的Tooltip的字体变大,可现在文章没有了.不过现在我<Br></Br>有个方法:在Windows 95 Desktop 属性中有desktop scheme中有Tooltip一项,可以该变<Br></Br>TOOLTIP的字体和大小.不过这样做所有程序的Tooltip都变大了.这可能不是你的本意.<Br></Br>但Tooltip是Windows 95 Common Control,由Windows<Br></Br>95内部实现,VC4.0的CTooltip类并不实现Tips的显示,所以要实现针对某个程序的<Br></Br>Tooltip的特殊显示,有一定难度.我以前曾经试图实现Tooltip的多行显示,做到了当Toolt.<Br></Br>显示时触发我的函数,消失时触发我的函数,但在显示时却出GP错误.现在我认为最简<Br></Br>单的方法是从头自己实现Tooltip类.一切随心所欲.*<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="11">在TreeList中使用Edit功能<Br>闻洋译</a></font></td></tr><tr><td><p></Br>首先了讲该TreeList应该使用TVS_EDITLABELS风格,可以在创建资源时指定,或者在使用Create时指定,或者在PreCreateWindos()中改变。<Br></Br>接下来需要处理TVN_BEGINLABELEDIT和TVN_ENDLABELEDIT消息。<Br></Br>void CXXXX::OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)<Br>{<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Limit text length<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetEditControl()->LimitText(127);<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*pResult = 0;<Br>}<Br>如果不处理 TVN_ENDLABELEDIT 消息,则文本的更改不会生效。<Br>&nbsp;void COutline::OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)<Br>{<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetEditControl()->GetWindowText(s);<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Set result to TRUE to accept the changes<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*pResult = TRUE;<Br>}<Br></Br>

⌨️ 快捷键说明

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