?? vctip9.html
字號:
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("wpspice test.cir", 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 "FindWindow()". 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. "CallWindowProc() is</font> </p><p><font SIZE="+0" FACE="Times New Roman">executed before DefWindowProc()". (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">"mywin" , 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( "CreateEx error" ) ;</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 "C" {</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> </p></body></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -