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

📄 vctip9.html

📁 一些关于vc编程技巧的文章
💻 HTML
📖 第 1 页 / 共 2 页
字号:
width, height)</font></font> </p><p><font SIZE="+0"> </font> </p><p><a NAME="tip72"></a><b><font SIZE="+2"><font FACE="Times New Roman">72.VC1.5 </font><fontFACE="黑体">如何调用进程</font><font FACE="Times New Roman">?</font></font></b> </p><p><font SIZE="+0">我用<font FACE="Times New Roman">VC1.52</font>编<fontFACE="Times New Roman">Windows</font>程序,中间想执行一个其他<fontFACE="Times New Roman">Windows</font>应用程序,并且让我的程序挂起等应用程序执行完后再继续,请问如何实现?</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">exec( ) </font>和 <fontFACE="Times New Roman">spawn( )</font>与<font FACE="Times New Roman">Windows</font>不兼容,所以它们肯定不行了.</font> </p><p><font SIZE="+0" FACE="Times New Roman">WinExec()</font> </p><p><font SIZE="+0">挂起的一个简单方法是得到新进程的主窗口句柄,然后进入死循环,直到此句柄变为无效。</font> </p><p><font SIZE="+0">不知道还有什么更漂亮一些的手法。</font> </p><p><font SIZE="+0">请问,怎么得到进程的主窗口句柄呢?</font> </p><p><font SIZE="+0">是呀,我也正想问呢.例如我执行的是<fontFACE="Times New Roman">PSpice for Windows.</font>用<font FACE="Times New Roman">WinExec()</font></font> </p><p><font SIZE="+0">可以如下<font FACE="Times New Roman">:</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">int nWinRun = WinExec(&quot;wpspice test.cir&quot;, SW_SHOWNORMAL);</font> </p><p><font SIZE="+0">可是如何得到新进程的主窗口句柄呢?能不能截取新进程的消息呢</font> </p><p><font SIZE="+0">紧接着用 <font FACE="Times New Roman">GetActiveWindow() </font>就可以<fontFACE="Times New Roman">.</font></font> </p><p><font SIZE="+0">当然还是在<font FACE="Times New Roman">win3.1 </font>下才有用<fontFACE="Times New Roman">....</font></font> </p><p><font SIZE="+0"><font FACE="Times New Roman">win95 </font>下由于有输入的局部化问题<fontFACE="Times New Roman">,</font>所以只能得到本线程的<font FACE="Times New Roman">Activate Window</font>或<font FACE="Times New Roman">Focus Window,</font>对于其他情况返回都是<fontFACE="Times New Roman">NULL.</font>这问题还是不知道怎么办<fontFACE="Times New Roman">,alas...</font></font> </p><p><font SIZE="+0">所 以 最 根 本 的 办 法 是 如 何 读 写 <fontFACE="Times New Roman">Windows </font>消 息 总 库 <font FACE="Times New Roman">.</font></font> </p><p><font SIZE="+0">哪 位 高 手 看 得 懂 <font FACE="Times New Roman">SPY </font>的 源 程 序 <font FACE="Times New Roman">(</font>在 <font FACE="Times New Roman">C++ </font>或 <font FACE="Times New Roman">Delphi </font>之 类 的 <font FACE="Times New Roman">Sample </font>中 有 <font FACE="Times New Roman">).</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">Use &quot;FindWindow()&quot;. according to window title, get window handle.</font> </p><p><font SIZE="+0" FACE="Times New Roman">then use Window Declassing method. that is write your own procedure</font> </p><p><font SIZE="+0" FACE="Times New Roman">to process the message you want to capture. &quot;CallWindowProc() is</font> </p><p><font SIZE="+0" FACE="Times New Roman">executed before DefWindowProc()&quot;. (sorry can not type chinese now.)</font> </p><p><font SIZE="+0">我在<font FACE="Times New Roman">Vc 4.0 </font>下用<fontFACE="Times New Roman">_exec, _spawn, </font>以及<font FACE="Times New Roman">WinExec</font>都没问题的!</font> </p><p><font SIZE="+0"> </font> </p><p><a NAME="tip73"></a><b><font SIZE="+2"><font FACE="Times New Roman">73.VC++1.5</font><fontFACE="黑体">编</font><font FACE="Times New Roman">Win3.1</font><font FACE="黑体">程序能否实现全局跳转</font><fontFACE="Times New Roman">?</font></font></b> </p><p><font SIZE="+0"><font FACE="Times New Roman">setjmp</font>即可,和<fontFACE="Times New Roman">DOS</font>下一样。</font> </p><p><font SIZE="+0">用<font FACE="Times New Roman">Windows API </font>中的 <fontFACE="Times New Roman">Catch() </font>和 <font FACE="Times New Roman">Throw() </font>可能会更好些。不过我也不知道和<fontFACE="Times New Roman">setjmp</font>有些什么区别。</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">setjmp </font>恐怕不行<fontFACE="Times New Roman">, </font>它好象只能用来编写 <font FACE="Times New Roman">C </font>程序,而不能用来编写 <font FACE="Times New Roman">C++ </font>程序<fontFACE="Times New Roman">!</font></font> </p><p><font SIZE="+0">我的感觉是,只要是代码段,可以不受函数和应用的限制,随便乱跳的。其实是数据段,也可以跳过去的。换句话说,在<fontFACE="Times New Roman">WINDOW</font>中,可以跳到任何地方,只要我乐意。</font> </p><p><b><font SIZE="+2"> </font></b> </p><p><a NAME="tip74"></a><b><font SIZE="+2"><font FACE="黑体">74.在</font><fontFACE="Times New Roman">DLL</font><font FACE="黑体">用自定义窗口</font></font></b> </p><p><font SIZE="+0">我在<font FACE="Times New Roman">DLL</font>中用如下窗口,</font> </p><p><font SIZE="+0" FACE="Times New Roman">class CMyWin:public CWnd</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">public:</font> </p><p><font SIZE="+0" FACE="Times New Roman">CMyWin() ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">} ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">CMyWin::CMyWin()</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">if( !CreateEx( WS_EX_TOPMOST ,</font> </p><p><font SIZE="+0" FACE="Times New Roman">AfxRegisterWndClass( CS_SAVEBITS ) ,</font> </p><p><font SIZE="+0" FACE="Times New Roman">&quot;mywin&quot; , WS_POPUP ,</font> </p><p><font SIZE="+0" FACE="Times New Roman">0 , 0 , 100 , 100 , NULL , NULL ) )</font> </p><p><font SIZE="+0" FACE="Times New Roman">AfxMessageBox( &quot;CreateEx error&quot; ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">请问有谁知道是什么原因?谁在<font FACE="Times New Roman">DLL</font>中做过类似工作,望赐教。<fontFACE="Times New Roman">ror</font>”,</font> </p><p><font SIZE="+0">我记得<font FACE="Times New Roman">AfxRegisterWndClass</font>好象应该在<fontFACE="Times New Roman">PreCreateWindow</font>中调用<font FACE="Times New Roman">,</font></font> </p><p><font SIZE="+0">在构造函数中用这个函数似乎有问题<fontFACE="Times New Roman">,</font>你再试试吧<font FACE="Times New Roman">!</font></font> </p><p><font SIZE="+0">用<font FACE="Times New Roman">C++</font>作<fontFACE="Times New Roman">DLL</font>可以吗<font FACE="Times New Roman">?</font>好象名字分裂回有些负作用吧<fontFACE="Times New Roman">?</font></font> </p><p><font SIZE="+0">用<font FACE="Times New Roman">MFC C</font>++是可以做传统的<fontFACE="Times New Roman">DLL</font>的。只要将回调函数定义成如下格式就行了:</font> </p><p><font SIZE="+0" FACE="Times New Roman">#ifdef __cplusplus</font> </p><p><font SIZE="+0" FACE="Times New Roman">extern &quot;C&quot; {</font> </p><p><font SIZE="+0" FACE="Times New Roman">#endif</font> </p><p><font SIZE="+0" FACE="Times New Roman">void __export FAR PASCAL fun() ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">#ifdef __cplusplus</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0" FACE="Times New Roman">#endif</font> </p><p><font SIZE="+0">其它与普通<font FACE="Times New Roman">MFC</font>程序一样。当然,在例程类的定义上也有点特别的地方</font> </p><p><font SIZE="+0">我如果在正常的执行程序中这样用<fontFACE="Times New Roman">CreateEx</font>就没有任何问题,而在<fontFACE="Times New Roman">DLL</font>中</font> </p><p><font SIZE="+0">就有问题。并且这问题也只发生在<fontFACE="Times New Roman">WIN3.1</font>上,在<font FACE="Times New Roman">WIN95</font>上却可以正常执行。</font> </p><p><font SIZE="+0" FACE="Times New Roman">-</font> </p><p><a NAME="tip75"></a><b><font SIZE="+2"><font FACE="黑体">75.如何让</font><fontFACE="Times New Roman">TOOLTIP</font><font FACE="黑体">的字体变大</font></font></b> </p><p><font SIZE="+0">前几天有个虫虫问如何让<font FACE="Times New Roman">vc4.0</font>的<fontFACE="Times New Roman">Tooltip</font>的字体变大<font FACE="Times New Roman">,</font>可现在文章没有了<fontFACE="Times New Roman">.</font>不过现在我</font> </p><p><font SIZE="+0">有个方法<font FACE="Times New Roman">:</font>在<fontFACE="Times New Roman">Windows 95 Desktop </font>属性中有<font FACE="Times New Roman">desktop scheme</font>中有<font FACE="Times New Roman">Tooltip</font>一项<fontFACE="Times New Roman">,</font>可以该变</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">TOOLTIP</font>的字体和大小<fontFACE="Times New Roman">.</font>不过这样做所有程序的<font FACE="Times New Roman">Tooltip</font>都变大了<fontFACE="Times New Roman">.</font>这可能不是你的本意<font FACE="Times New Roman">.</font></font> </p><p><font SIZE="+0">但<font FACE="Times New Roman">Tooltip</font>是<fontFACE="Times New Roman">Windows 95 Common Control,</font>由<font FACE="Times New Roman">Windows</font></font> </p><p><font SIZE="+0"><font FACE="Times New Roman">95</font>内部实现<fontFACE="Times New Roman">,VC4.0</font>的<font FACE="Times New Roman">CTooltip</font>类并不实现<fontFACE="Times New Roman">Tips</font>的显示<font FACE="Times New Roman">,</font>所以要实现针对某个程序的</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">Tooltip</font>的特殊显示<fontFACE="Times New Roman">,</font>有一定难度<font FACE="Times New Roman">.</font>我以前曾经试图实现<fontFACE="Times New Roman">Tooltip</font>的多行显示<font FACE="Times New Roman">,</font>做到了当<fontFACE="Times New Roman">Toolt.</font></font> </p><p><font SIZE="+0">显示时触发我的函数<font FACE="Times New Roman">,</font>消失时触发我的函数<fontFACE="Times New Roman">,</font>但在显示时却出<font FACE="Times New Roman">GP</font>错误<fontFACE="Times New Roman">.</font>现在我认为最简</font> </p><p><font SIZE="+0">单的方法是从头自己实现<font FACE="Times New Roman">Tooltip</font>类<fontFACE="Times New Roman">.</font>一切随心所欲<font FACE="Times New Roman">.*</font></font> </p><p><font SIZE="+0"> </font> </p><hr><p><a HREF="skill.htm">返回上页</a>&nbsp;&nbsp;&nbsp;&nbsp; </p></body></html>

⌨️ 快捷键说明

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