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

📄 其它.htm

📁 VC的一些技巧性文档
💻 HTM
字号:
<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">快速格式化代码块 <Br>Anonymous	翻译:Yu Hail</a></font></td></tr><tr><td><p></Br>如果你在某个晚上几个小时都在使用同一种格式的代码块,又是剪切,又是粘贴,注解, 你会为每次都要调整语句的缩进便于阅读而烦恼,那么,你可以让VC++ 5.0做这项工作.<Br></Br>先选择那些文本,然后选择编辑菜单Edit, 选中高级(Advanced)项.然后选择格式选择(Format Selection)一项,这样VC内置的编辑器就会使用你选定文本的缩进和空格格式来格式化你所输入的内容.<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="2">手动调试技巧<Br>Mark Davis	翻译:Yu Hail</a></font></td></tr><tr><td><p></Br>这儿有一些VC调试的技巧<Br></Br>首先设置断点<Br></Br>在类观察器中设置函数断点,先选择一个函数,然后从相关菜单中选择设置断点,或按F9键. 你也可以使用工具栏中查找组合框来输入函数名,然后按F9设置断点.<Br></Br>PID向导<Br></Br>如果你想附加一个过程,却没有过程的ID,那么使用过程观察器(PVIEW). (PID). 要记住从十六进制转为十进制时,WIN95的PID是个负整数. 你可以用附件中的计算器来进行这种转换. 例如:当有一个十六进制的PID为FFFE64C3时,你可以这样做:<Br></Br>HexPid -> [Not] -> (DEC) -> [Not] -> DecPid<Br>用这种方法,最后结果为-105277. 在MSDEV命令行中加上此过程的十进制PID:<Br></Br>start msdev -p -105277 -e -105277<Br>要是在WINNT下转换PID,不要使用NOT操作.<Br></Br>自定义你的工具提示<Br></Br>如果想自定义调试器工具提示,只需要简单地修改文件AUTOEXP.DAT即可. 此文件位于MSDEV\BIN子目录下.如果你想自动地显示单码字符串, 可以在[Unicode]小节中加上 DisplayUnicode=1.<Br></Br>观察窗口<Br></Br>你可以改变观察窗口中变量和表达式的显示方式,当然,要指定一些格式, 例如:us(Unicode String),x(hexadecimal integer).如果你还想有一些自已的显示方式,可以通过在线帮助查找Formatting Watch Variables,或者察看AUTOEXP.DAT文件.<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="3">记住代码维护<Br>Bradley L. Jones	翻译:Yu Hail</a></font></td></tr><tr><td><p></Br>为了减少程序的大小,你可能使用了一些简称和缩写,但这将导致代码难以维护. 这些缩写可能在写程序时你很清楚, 但对于维护你程序的人来说并不明白. 因此,会导致维护程序的困难.<Br></Br>如下四个错误会产生难以维护的代码:<Br></Br>缺少或者没有足够的空格.<Br>缺少注释.<Br>过度的优化.<Br>过多的使用汇编例程.<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="4">如何计算一个串的大小 </a></font></td></tr><tr><td><p></Br>函数CDC:: Det text Extent 根据当前选择的字体计算一个串的高度和宽度。如果使用的不是系统字体而是其他字体,则在调用GetTextExtent之前将字体选进设备上下文中是很重要的,否则计算高度和宽度时将依据系统字体,由此得出的结果当然是不正确的。下述样板程序当改变下压按钮的标题时动态调整按钮的大小,按钮的大小由按钮的字体和标题的大小而定。响应消息WM_SETTEXT时调用OnSetText,该消息使用ON_MESSAE宏指令定义的用户自定义消息。<Br></Br>LRESULT CMyButton:: OnSettext (WPARAM wParam, LPARAM lParam)<Br></Br>{<Br></Br>//Pass message to window procedure.<Br></Br>LRESULT bResult=CallWindowProc (*GetSuperWndProcAddr (),<Br></Br>m_hWnd, GetCurrentMessage () ->message,wParam,lParam);<Br></Br>//Get title of push button.<Br></Br>CString strTitle;<Br></Br>GetWindowText (strTitle);<Br></Br>//Select current font into device context.<Br></Br>CDC* pDC=GetDc ();<Br></Br>CFont*pFont=GetFont ();<Br></Br>CFont*pOldFont=pDC->SelectObject (pFont);<Br></Br>//Calculate size of title.<Br></Br>CSize size=pDC->GetTextExent (strTitle,strTitle.GetLength ());<Br></Br>//Adjust the button's size based on its title.<Br></Br>//Add a 5-pixel border around the button.<Br></Br>SetWindowPos (NULL, 0, 0, size.cx+10, size.cy+10,<Br></Br>SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);<Br></Br>//Clean up.<Br></Br>pDC->SelectFont (pOldFont);<Br></Br>ReleaseDC (pDC);<Br></Br>return bResult;<Br></Br>}<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="5">如何正确显示包含标签字符的串 </a></font></td></tr><tr><td><p></Br>调用GDI文本绘画函数时需要展开标签字符,这可以通过调用CDC:: TabbedTextOut或者CDC:: DrawText并指定DT_EXPANDTABS标志来完成。TabbedTextOut函数允许指定标签位的数组,下例指定每20设备单位展开一个标签:<Br></Br>void CSampleView:: OnDraw (CDC* pDC)<Br></Br>{<Br></Br>CTestDoc* pDoc=GetDocument ();<Br></Br>ASSERT_VALID (pDoC);<Br></Br>CString str;<Br></Br>str.Format (_T ("Cathy\tNorman\tOliver"));<Br></Br>int nTabStop=20; //tabs are every 20 pixels<Br></Br>pDC->TabbedtextOut (10, 10, str, 1, &nTabStop, 10);<Br></Br>}<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="6">串太长时如何在其末尾显示一个省略号 </a></font></td></tr><tr><td><p></Br>调用CDC:: DrawText并指定DT_END_ELLIPSIS标志,这样就可以用小略号取代串末尾的字符使其适合于指定的边界矩形。如果要显示路径信息,指定DT_END_ELLIPSIS标志并省略号取代串中间的字符。<Br></Br>void CSampleView:: OnDraw (CDC* pDC)<Br></Br>{<Br></Br>CTestDoc* pDoc=GetDocument ();<Br></Br>ASSERT_VALID (pDoc);<Br></Br>//Add ellpsis to end of string if it does not fit<Br></Br>pDC->Drawtext (CString ("This is a long string"),<Br></Br>CRect (10, 10, 80, 30), DT_LEFT | DT_END_ELLIPSIS);<Br></Br>//Add ellpsis to middle of string if it does not fit<Br></Br>pDC->DrawText (AfxgetApp () ->m_pszhelpfilePath,<Br></Br>CRect (10, 40, 200, 60), DT_LEFT | DT_PATH_ELLIPSIS);<Br></Br>}<Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="7">如何快速地格式化一个CString对象 </a></font></td></tr><tr><td><p></Br>调用CString:: Format,该函数和printf函数具有相同的参数,下例说明了如何使用Format函数:<Br></Br>//Get size of window.<Br></Br>CRect rcWindow;<Br></Br>GetWindowRect (rcWindow);<Br></Br>//Format message string.<Br></Br>CString strMessage;<Br></Br>strMessage.Format (_T ("Window Size (%d, %d)"),<Br></Br>rcWindow.Width (), rcWindow.Height ());<Br></Br>//Display the message.<Br></Br>MessageBox (strmessage);<Br> <Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="8">VC1.5下如何跳到第一事例? </a></font></td></tr><tr><td><p></Br>CWinApp::InitInstance()中可知是第二事例,但如何在return FALSE; 之前FindWindow()到第一事例呢? 主要困难是:<Br></Br>1).主窗口类名可否得到 ( 主窗口==MainFrame ? 若是,怎知MainFrame类名?<Br></Br>2).Title因含有文档名, 是一不确定串.<Br></Br>1类名是动态的,所以应该不易得到。(不知是否如此?)<Br></Br>类名不是动态的,如果不作处理, MFC 总是使用 AfxFrameOrView 为类名,<Br></Br>只有 MainFrame, 和 View 等等才会用 AfxFrameOrView,<Br></Br>我刚用 spy 看了我的一个程序,主窗口的Class 为 Afx:b:13ce:6:3be7<Br></Br>至于如何注册自己定义的类,我还没有学会,望高手指教。<Br></Br>AfxRegisterWndClass()<Br></Br>我用的方法是只查Title中前半部分和你的要求串一致即可,忽略后面的文档?<Br></Br>FindWindow() 函数需要给定窗口类名和窗口标题(Title),不知你是怎样做到只查前半部分的?<Br></Br>用EnumWindows()一个窗口一个窗口查,不能用 FindWindow()<Br></Br>这里我有另外一个问题:<Br></Br>找到第一事例的窗口后,如何激活它,使它成为当前窗口?<Br></Br>极小状态时,才能把它激活出来,否则也是没有动静,不知何故?<Br></Br>if (IsIconic(hwndMain))<Br></Br>ShowWindow(hwndMain, SW_RESTORE);<Br></Br>else<Br></Br>SetActiveWindow(hwndMain);<Br></Br> <Br></p></td></tr><tr><td><font color="0000FF"><a name="9">如何用VC2.0编写能Edit超过64K的类 </a></font></td></tr><tr><td><p></Br>我要用 VC2.0 编写一个 Editor, 要求能编辑超过 64K 的文本.我的 Edit 类从 CEdit 类派生出来 , 但编辑超过 64K 的文本就显示不出来. 原知道在 VC1.5 中 CEdit 类只能编辑小于 64K 的文本,不知 VC2.0 是否也一样?<Br></Br></Br>自己从CWnd类派生,管理内存、输入、显示等(其实不累)。至于从CEdit中派生,我也没有头绪。<Br></Br>VC2.0会有这事?我没试过,但我不相信。VC2.0是运行在Win95或WindowsNT 上的开发工具,是Win32的开发工具。Windows 95及NT对应用程序在内存上没有段的限制,应用程序最多可利用高达4G的内存(包括系统占用)。你所说的限制大概是VC1.5的限制吧。盖因VC1.5运行于Win16上,每个段不能超过64K。<Br></Br>的确如此,VC2.0 有两个例子 samples\mfc\multipad 和 samples\mfc\superpad 也是如此。不信你看看。<Br></Br> <Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="10">在VC++1.5中如何new一个大数组 </a></font></td></tr><tr><td><p></Br>我想在用VC++1.5编程时,new一个[512][512]的大数组,却总是不行.<Br></Br>哪位专家可以指点一下.<Br></Br>选用Larger and Huger模式的库编译<Br></Br>我用过Large模式,好象不行呀!我用Huge模式,头文件编译时就出错了!<Br></Br>VC++ 1.5 毕竟是16的, 512*512 是多少?做链表好了否则就用VC++2.0, 全32位就不该有这问题了<Br></Br>这样的做法并不十分好,要分配如此大的内存最好用全局的内存分配函数.直接用指针操作,效率也会提高.<Br></Br>用MFC类不行吗?如CObArray<Br></Br>请用GlobalAllocPtr和GlobalFreePtr这一对函数,如下:<Br></Br>DWORD dwSize ;;<Br></Br>hpsStr =(char huge *)GlobalAllocPtr( GMEM_MOVEABLE , dwSize ) ;<Br></Br>...<Br></Br>GlobalFreePtr( hpsStr ) ;<Br></Br>不管多大数组,都保证没有问题。<Br></Br>在VC1.5中,如何得到子窗口在主窗口中的相对坐标?<Br></Br>比较笨的方法是先ClientToScreen转成屏幕坐标,然后ScreenToClient转成主窗口坐标,不知有没有更方便的方法.<Br></Br>MapWindowPoints(hwndChild, hwndParent, (POINT FAR *)lprc, 2)lprc 设成子窗口内的坐标(0,0, width, height)<Br></Br></p></td></tr></table><p align="center"><img src="/logo.gif" align="center"><a href="/co/index.htm">北京美达美科技有限公司</a> 版权所有: 1998-1999</a></p></body></html>

⌨️ 快捷键说明

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