📄 vctip9.html
字号:
<html><head><meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"><meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 3.0"><meta NAME="doccomm" CONTENT="sss"><meta NAME="Template" CONTENT="C:\MSOffice\Template\Sl_BOOK.dot"><meta NAME="Author" CONTENT="Cheng Jinxing"><title>Visual C++编程小技巧之九</title></head><body TEXT="#000000" BGCOLOR="#CCFFFF" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000"><p align="center"><br><font SIZE="+3"><font FACE="Times New Roman">Visual C++</font><font FACE="楷体_GB2312">编程小技巧之九</font></font> </p><p><font SIZE="+0"><a HREF="#tip68"><font FACE="Times New Roman">68. VC1.5</font>下如何跳到第一事例<fontFACE="Times New Roman">?</font></a></font> </p><p><font SIZE="+0"><a HREF="#tip69"><font FACE="Times New Roman">69. </font>为什么<fontFACE="Times New Roman">VC++2.0</font>中使用文件对话框会死机<fontFACE="Times New Roman">?</font></a></font> </p><p><font SIZE="+0"><a HREF="#tip70"><font FACE="Times New Roman">70. </font>在<fontFACE="Times New Roman">VC++1.5</font>中如何<font FACE="Times New Roman">new</font>一个大数组<fontFACE="Times New Roman">?</font></a></font> </p><p><font SIZE="+0"><a HREF="#tip71"><font FACE="Times New Roman">71. </font>在<fontFACE="Times New Roman">VC1.5</font>中,如何得到子窗口在主窗口中的相对坐标?</a></font> </p><p><font SIZE="+0"><a HREF="#tip72"><font FACE="Times New Roman">72. VC1.5 </font>如何调用进程<fontFACE="Times New Roman">?</font></a></font> </p><p><font SIZE="+0"><a HREF="#tip73"><font FACE="Times New Roman">73. VC++1.5</font>编<fontFACE="Times New Roman">Win3.1</font>程序能否实现全局跳转<fontFACE="Times New Roman">?</font></a></font> </p><p><font SIZE="+0"><a HREF="#tip74"><font FACE="Times New Roman">74. </font>如何在<fontFACE="Times New Roman">DLL</font>用自定义窗口<font FACE="Times New Roman">?</font></a></font> </p><p><font SIZE="+0"><a HREF="#tip75"><font FACE="Times New Roman">75. </font>如何让<fontFACE="Times New Roman">TOOLTIP</font>的字体变大<font FACE="Times New Roman">?</font></a></font> </p><p><font SIZE="+0"> </font> </p><p><a NAME="tip68"></a><b><font SIZE="+2"><font FACE="Times New Roman">68.VC1.5</font><fontFACE="黑体">下如何跳到第一事例</font><font FACE="Times New Roman">?</font></font></b> </p><p><font SIZE="+0">各位大虾<font FACE="Times New Roman">: CWinApp::InitInstance()</font>中可知是第二事例<fontFACE="Times New Roman">,</font>但如何在<font FACE="Times New Roman">return FALSE;</font></font> </p><p><font SIZE="+0">之前<font FACE="Times New Roman">FindWindow()</font>到第一事例呢<fontFACE="Times New Roman">? </font>主要困难是<font FACE="Times New Roman">:</font></font> </p><p><font SIZE="+0"><font FACE="Times New Roman">1).</font>主窗口类名可否得到 <fontFACE="Times New Roman">( </font>主窗口<font FACE="Times New Roman">==MainFrame ? </font>若是<fontFACE="Times New Roman">,</font>怎知<font FACE="Times New Roman">MainFrame</font>类名<fontFACE="Times New Roman">?</font></font> </p><p><font SIZE="+0"><font FACE="Times New Roman">2).Title</font>因含有文档名<fontFACE="Times New Roman">, </font>是一不确定串<font FACE="Times New Roman">.</font></font> </p><p><font SIZE="+0"><font FACE="Times New Roman">1. </font>类名是动态的,所以应该不易得到。(不知是否如此?)</font> </p><p><font SIZE="+0">类名不是动态的,如果不作处理, <fontFACE="Times New Roman">MFC </font>总是使用 <font FACE="Times New Roman">AfxFrameOrView </font>为类名,</font> </p><p><font SIZE="+0">只有 <font FACE="Times New Roman">MainFrame, </font>和 <fontFACE="Times New Roman">View </font>等等才会用 <font FACE="Times New Roman">AfxFrameOrView,</font></font> </p><p><font SIZE="+0">我刚用 <font FACE="Times New Roman">spy </font>看了我的一个程序,主窗口的<fontFACE="Times New Roman">Class </font>为 <font FACE="Times New Roman">Afx:b:13ce:6:3be7</font></font> </p><p><font SIZE="+0">至于如何注册自己定义的类,我还没有学会,望高手指教。</font> </p><p><font SIZE="+0" FACE="Times New Roman">AfxRegisterWndClass()</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">2. </font>我用的方法是只查<fontFACE="Times New Roman">Title</font>中前半部分和你的要求串一致即可,忽略后面的文档<fontFACE="Times New Roman">?</font></font> </p><p><font SIZE="+0"><font FACE="Times New Roman">FindWindow() </font>函数需要给定窗口类名和窗口标题(<fontFACE="Times New Roman">Title</font>),不知你是怎样做到只查前半部分的?</font> </p><p><font SIZE="+0">用<font FACE="Times New Roman">EnumWindows()</font>一个窗口一个窗口查,不能用 <font FACE="Times New Roman">FindWindow()</font></font> </p><p><font SIZE="+0">这里我有另外一个问题:</font> </p><p><font SIZE="+0">找到第一事例的窗口后,如何激活它,使它成为当前窗口?</font> </p><p><font SIZE="+0">极小状态时,才能把它激活出来,否则也是没有动静,不知何故?</font> </p><p><font SIZE="+0" FACE="Times New Roman">if (IsIconic(hwndMain))</font> </p><p><font SIZE="+0" FACE="Times New Roman">ShowWindow(hwndMain, SW_RESTORE);</font> </p><p><font SIZE="+0" FACE="Times New Roman">else</font> </p><p><font SIZE="+0" FACE="Times New Roman">SetActiveWindow(hwndMain);</font> </p><p><font SIZE="+0"> </font> </p><p><a NAME="tip69"></a><b><font SIZE="+2"><font FACE="黑体">69.关于</font><fontFACE="Times New Roman">VC++2.0</font><font FACE="黑体">中使用文件对话框的求助</font></font></b> </p><p><font SIZE="+0">在<font FACE="Times New Roman">VC++2.0</font>中使用了标准文件对话框以后<fontFACE="Times New Roman">,</font>编译联接都能正常通过,而且使用<fontFACE="Times New Roman">Ctrl+F5</font>执行<font FACE="Times New Roman">EXE</font>文件也完全正常<fontFACE="Times New Roman">,</font>但是一旦用<font FACE="Times New Roman">F5</font>调试进入, 使用该对话框的代码时<font FACE="Times New Roman">,Win95</font>就会异常中止<fontFACE="Times New Roman">,</font>请问各位高手<font FACE="Times New Roman">,</font>为什么<fontFACE="Times New Roman">?</font></font> </p><p><font SIZE="+0">文件对话框,改变了执行程序的当前路径,从而干扰了调试系统。如果是为了调试,可以使文件对话框定位在当前目录,并且运行时不要在其中改变目录。</font> </p><p><font SIZE="+0"> </font> </p><p><a NAME="tip70"></a><b><font SIZE="+2"><font FACE="黑体">70.如何用</font><fontFACE="Times New Roman">VC2.0</font><font FACE="黑体">编写能</font><fontFACE="Times New Roman">Edit</font><font FACE="黑体">超过</font><fontFACE="Times New Roman">64K</font><font FACE="黑体">的类</font></font></b> </p><p><font SIZE="+0">我要用 <font FACE="Times New Roman">VC2.0 </font>编写一个 <fontFACE="Times New Roman">Editor, </font>要求能编辑超过 <font FACE="Times New Roman">64K </font>的文本<font FACE="Times New Roman">.</font>我的 <font FACE="Times New Roman">Edit </font>类从 <font FACE="Times New Roman">CEdit </font>类派生出来 <fontFACE="Times New Roman">, </font>但编辑超过 <font FACE="Times New Roman">64K </font>的文本就显示不出来<fontFACE="Times New Roman">. </font>原知道在 <font FACE="Times New Roman">VC1.5 </font>中 <font FACE="Times New Roman">CEdit </font>类只能编辑小于 <fontFACE="Times New Roman">64K </font>的文本<font FACE="Times New Roman">,</font>不知 <fontFACE="Times New Roman">VC2.0 </font>是否也一样<font FACE="Times New Roman">?</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">.</font> </p><p><font SIZE="+0">自己从<font FACE="Times New Roman">CWnd</font>类派生,管理内存、输入、显示等(其实不累)。至于从<fontFACE="Times New Roman">CEdit</font>中派生,我也没有头绪。</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">VC2.0</font>会有这事?我没试过,但我不相信。<fontFACE="Times New Roman">VC2.0</font>是运行在<font FACE="Times New Roman">Win95</font>或<fontFACE="Times New Roman">WindowsNT </font>上的开发工具,是<fontFACE="Times New Roman">Win32</font>的开发工具。<font FACE="Times New Roman">Windows 95</font>及<font FACE="Times New Roman">NT</font>对应用程序在内存上没有段的限制,应用程序最多可利用高达<fontFACE="Times New Roman">4G</font>的内存<font FACE="Times New Roman">(</font>包括系统占用<fontFACE="Times New Roman">)</font>。你所说的限制大概是<font FACE="Times New Roman">VC1.5</font>的限制吧。盖因<fontFACE="Times New Roman">VC1.5</font>运行于<font FACE="Times New Roman">Win16</font>上,每个段不能超过<fontFACE="Times New Roman">64K</font>。</font> </p><p><font SIZE="+0">的确如此,<font FACE="Times New Roman">VC2.0 </font>有两个例子 <font FACE="Times New Roman">samples\mfc\multipad </font>和 <font FACE="Times New Roman">samples\mfc\superpad </font>也是如此。不信你看看。</font> </p><p><font SIZE="+0"> </font> </p><p><a NAME="tip71"></a><b><font SIZE="+2"><font FACE="黑体">71.在</font><fontFACE="Times New Roman">VC++1.5</font><font FACE="黑体">中如何</font><fontFACE="Times New Roman">new</font><font FACE="黑体">一个大数组</font></font></b> </p><p><font SIZE="+0">我想在用<font FACE="Times New Roman">VC++1.5</font>编程时,<fontFACE="Times New Roman">new</font>一个<font FACE="Times New Roman">[512][512]</font>的大数组,却总是不行.</font> </p><p><font SIZE="+0">哪位专家可以指点一下.</font> </p><p><font SIZE="+0">选用<font FACE="Times New Roman">Larger and Huger</font>模式的库编译</font> </p><p><font SIZE="+0">我用过<font FACE="Times New Roman">Large</font>模式,好象不行呀!我用<fontFACE="Times New Roman">Huge</font>模式,头文件编译时就出错了!</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">VC++ 1.5 </font>毕竟是<fontFACE="Times New Roman">16</font>的<font FACE="Times New Roman">, 512*512 </font>是多少?做链表好了否则就用<fontFACE="Times New Roman">VC++2.0, </font>全<font FACE="Times New Roman">32</font>位就不该有这问题了</font> </p><p><font SIZE="+0">这样的做法并不十分好<font FACE="Times New Roman">,</font>要分配如此大的内存最好用全局的内存分配函数<fontFACE="Times New Roman">.</font>直接用指针操作<font FACE="Times New Roman">,</font>效率也会提高<fontFACE="Times New Roman">.</font></font> </p><p><font SIZE="+0">用<font FACE="Times New Roman">MFC</font>类不行吗<fontFACE="Times New Roman">?</font>如<font FACE="Times New Roman">CObArray</font></font> </p><p><font SIZE="+0">请用<font FACE="Times New Roman">GlobalAllocPtr</font>和<fontFACE="Times New Roman">GlobalFreePtr</font>这一对函数,如下:</font> </p><p><font SIZE="+0" FACE="Times New Roman">DWORD dwSize ;;</font> </p><p><font SIZE="+0" FACE="Times New Roman">hpsStr =(char huge *)GlobalAllocPtr( GMEM_MOVEABLE , dwSize ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">...</font> </p><p><font SIZE="+0" FACE="Times New Roman">GlobalFreePtr( hpsStr ) ;</font> </p><p><font SIZE="+0">不管多大数组,都保证没有问题。</font> </p><p><font SIZE="+0">在<font FACE="Times New Roman">VC1.5</font>中,如何得到子窗口在主窗口中的相对坐标?</font> </p><p><font SIZE="+0">比较笨的方法是先<font FACE="Times New Roman">ClientToScreen</font>转成屏幕坐标<fontFACE="Times New Roman">,</font>然后<font FACE="Times New Roman">ScreenToClient</font>转成主窗口坐标<fontFACE="Times New Roman">,</font>不知有没有更方便的方法<fontFACE="Times New Roman">.</font></font> </p><p><font SIZE="+0"><font FACE="Times New Roman">MapWindowPoints(hwndChild, hwndParent, (POINT FAR *)lprc, 2)lprc </font>设成子窗口内的坐标<font FACE="Times New Roman">(0,0,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -