Programming °æ (¾«»ªÇø)

×÷  ¼Ò: compus (À¶Ìì) on board 'Programming'
Ìâ  Ä¿: vc±à³ÌÖ¸ÄÏ68ƪ(1)
À´  Ô´: ¹þ¶û±õ×϶¡ÏãÕ¾
ÈÕ  ÆÚ: Sun Oct 26 20:07:12 1997
³ö  ´¦: compus.bbs@bbs.net.tsinghua.edu.cn

·¢ÐÅÈË: Zeemon (ÈûÏÂÇï), ÐÅÇø: Visual
±ê  Ìâ: vc±à³ÌÖ¸ÄÏ68ƪ(1)
·¢ÐÅÕ¾: BBS Ë®Ä¾Ç廪վ (Thu Oct 23 12:31:48 1997)

·¢ÐÅÈË: knofler (Break Heart), ÐÅÇø: Programming
±ê  Ìâ: vc±à³ÌÖ¸ÄÏ68ƪ(1)
·¢ÐÅÕ¾: BBS Ë®Ä¾Ç廪վ (Sat Oct 18 19:09:52 1997)


  Ä¿µÄ£º Îª¹ã´óVisual C++³õѧÕߺͳÌÐòÔ±ÌṩһЩ°ïÖú£¬Ò²ÐíÄãÒѾ­ÊÇ vc¸ßÊÖ£¬
   ¿ÉÒÔ²»¿´ÕâЩÎÄÕÂ.

  ËµÃ÷:´ó²¿·ÖÌâ²ÄÀ´×Ô "ÓöàýÌåѧ Visual C++" ¹âÅÌ,Ò»²¿·ÖÊÇżµÄ ±à³ÌÌå»á.
  ÎÒÒѾ­½«ÕâЩÀý×ӷŵ½  166.111.72.52/incoming/knofler/vc/vckit.zip.
  ÐèÒªµÄ ÅóÓÑ¿ÉÒÔȥȡ¡£Èç¹ûÓРCRC Error,¿ÉÒÔÓëÎÒÁªÏµ. Èç¹û ÊÇ´úÂëµÄÎÊÌâ»ò
  PostµÄ ÎÊÌ⣬Çë¸ßÊÖ¼°Ê±Ö¸Õý.

  ÎÄÕ°²ÅÅ: ×¼±¸·ÖÁùµ½ÆߴΠPost.

  ¸ø°àÖ÷µÄ »°: ¿ÉÄÜÓÐЩÄÚÈÝÓ뾫»ªÇøÄڵĶ«Î÷Öظ´£¬ÇëÁ½â.


  ÕýÎÄ:

   1. ÈçºÎ»ñÈ¡Ó¦ÓóÌÐòµÄ ÊµÀý¾ä±ú?
    Ó¦ÓóÌÐòµÄ ÊµÀý¾ä±ú±£´æÔÚCWinAppIm_hInstance ÖÐ,¿ÉÒÔÕâôµ÷ÓÃ
    AfxGetInstancdHandle»ñµÃ¾ä±ú.
      Example: HANDLE hInstance=AfxGetInstanceHandle();

   2. ÈçºÎͨ¹ý´úÂë»ñµÃÓ¦ÓóÌÐòÖ÷´°¿ÚµÄ Ö¸Õë?
     Ö÷´°¿ÚµÄ Ö¸Õë±£´æÔÚCWinThread::m_pMainWndÖÐ,µ÷ÓàAfxGetMainWndʵÏÖ¡£
      AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //ʹ³ÌÐò×î´ó»¯.

   3.ÈçºÎÔÚ³ÌÐòÖлñµÃÆäËû³ÌÐòµÄ Í¼±ê?
      Á½ÖÖ·½·¨:
        (1) SDKº¯Êý SHGetFileInfo »òʹÓàExtractIcon»ñµÃͼ±ê×ÊÔ´µÄ handle,
        (2) SDKº¯Êý SHGetFileInfo»ñµÃÓйØÎļþµÄ ºÜ¶àÐÅÏ¢,Èç´óСͼ±ê,ÊôÐÔ,
           ÀàÐ͵È.
          Example(1): ÔÚ³ÌÐò´°¿Ú×óÉϽÇÏÔʾ NotePadͼ±ê.

           void CSampleView: OnDraw(CDC * pDC)
             {
                if( :: SHGetFileInfo(_T("c:\\pwin95\\notepad.exe"),0,
                     &stFileInfo,sizeof(stFileInfo),SHGFI_ICON))
                   {
                     pDC ->DrawIcon(10,10,stFileInfo.hIcon);
                   }    
              }
            Example(2):ͬÑù¹¦ÄÜ,Use ExtractIcon Function

            void CSampleView:: OnDraw(CDC *pDC)
              {
                HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T
                 ("NotePad.exe"),0);

                if (hIcon &&hIcon!=(HICON)-1)
                   pDC->DrawIcon(10,10,hIcon);
                }
   ËµÃ÷: »ñµÃnotepad.exeµÄ·¾¶Õý¹æÉÏÀ´ËµÓÃGetWindowsDirectory º¯ÊýµÃµ½,
      Èç¹ûÊǵ÷Óàwin95ϵĻ­±Ê£¬Ó¦¸ÃÓ÷ÃÎÊ×¢²á±íµÄ·½·¨»ñµÃÆä·¾¶£¬Òª×÷³ÉÒ»¸ö
     ±È½Ï¿¼¾¿µÄ³ÌÐò£¬¿¼ÂÇÓ¦¸ÃÈ«Ãæµã.

   4.ÈçºÎ±à³Ì½áÊøÓ¦ÓóÌÐò?ÈçºÎ±à³Ì¿ØÖÆwindowsµÄÖØÐÂÒýµ¼?
      ÕâÊǸöºÜ¼òµ¥ÓÖÊDZà³ÌÖо­³£ÒªÓöµ½µÄÎÊÌâ.
     µÚÒ»ÎÊ,Ïò´°¿Ú·¢ËÍ WM_CLOSEÏûÏ¢,µ÷ÓàCWnd::OnClose³ÉÔ±º¯Êý.ÔÊÐí¶ÔÓû§Ìáʾ
    ÊÇ·ñ±£´æÐ޸ĹýµÄÊý¾Ý.
     Example: AfxGetMainWindow()->SendMessage(WM_CLOSE);

    »¹¿ÉÒÔ´´½¨Ò»¸ö×Ô¶¨ÒåµÄº¯Êý Terminate Window
      void Terminate Window(LPCSTR pCaption)
      {
          CWnd *pWnd=Cwnd::FindWindow(NULL,pCaption);
               if (pWnd)
                  pWnd ->SendMessage(WM_CLOSE);
      }

   ËµÃ÷: FindWindowº¯Êý²»ÊÇÌᳫµÄ×ö·¨£¬ÒòΪËüÎÞ·¨´¦Àí±êÌâÀ¸×Ô¶¯¸Ä±ä£¬±ÈÈç
   ÎÒÃÇÒª¼ì²â NotepadÊDz»ÊÇÒÑÔËÐжøÊÂÏȲ»ÖªµÀNotepadµÄ±êÌâÀ¸,Õâʱ FindWindow¾Í
   ÎÞÄÜΪÁ¦ÁË£¬¿ÉÒÔͨ¹ýö¾Ù windowsÈÎÎñÁбíµÄ°ì·¨À´ÊµÏÖ¡£ ÔÚ »úе³ö°æÉç
   "Windows 95 API¿ª·¢ÈËÔ±Ö¸ÄÏ"Ò»ÊéÓбȽÏÏêϸµÄ½éÉÜ,ÕâÀï¾Í²»ÔÙ¶à˵ÀÖ¡£

  µÚ¶þÎÊ,Use ExitWindowsEx Functionº¯Êý¿ØÖÆϵͳÊÇÖØÐÂÒýµ¼£¬»¹ÊÇÖØÆô windows.
   Ç°ÃæÒѾ­ÓÐÈ˽²¹ýÀÖ£¬¾Í²»ÔÙÌáÁË¡£

   5.ÔõÑù¼ÓÔÔÆäËûµÄÓ¦ÓóÌÐò?
    ÎҼǵÃÕâºÃÏóÊdzö³¡Æµ¶ÈºÜ¸ßµÄÎÊÌâ¡£
    Èý¸öSDKº¯Êý winexec, shellexecute,createprocess¿ÉÒÔʹÓá£
     WinExec×î¼òµ¥£¬Á½¸ö²ÎÊý£¬Ç°Ò»¸öÖ¸¶¨Â·¾¶£¬ºóÒ»¸öÖ¸¶¨ÏÔʾ·½Ê½.ºóÒ»¸ö²ÎÊý
  ÖµµÃ˵һÏ£¬±ÈÈçÄàÓàSW_SHOWMAXMIZED·½Ê½È¥¼ÓÔÔÒ»¸öÎÞ×î´ó»¯°´Å¥µÄ ³ÌÐò£¬ºÇºÇ
  ¾ÍÊÇNeterm,calcµÈµÈ£¬¾Í²»»á³öÏÖÕý³£µÄ ´°Ì壬µ«ÊÇÒѾ­±»¼Óµ½ÈÎÎñÁбíÀïÁË¡£
    ShellExecute½Ï WinExexÁé»îÒ»µã£¬¿ÉÒÔÖ¸¶¨¹¤×÷Ŀ¼,ÏÂÃæµÄ Example¾ÍÊÇÖ±½Ó
  ´ò¿ª c:\temp\1.txt,¶ø²»ÓüÓÔÔÓë txtÎļþ¹ØÁªµÄÓ¦ÓóÌÐò,ºÜ¶à°²×°³ÌÐòÍê³Éºó
  ¶¼»á´ò¿ªÒ»¸ö´°¿Ú£¬À´ÏÔʾReadme or Faq,ż²Â¾ÍÊÇÕâô×÷µÄÀ².
    ShellExecute(NULL,NULL,_T("1.txt"),NULL,_T("c:\\temp"),SW_SHOWMAXMIZED);

    CreateProcess×ÔÓ£¬Ò»¹²ÓÐÊ®¸ö²ÎÊý£¬²»¹ý´ó²¿·Ö¶¼¿ÉÒÔÓÃNULL´úÌ棬Ëü¿ÉÒÔ
    Ö¸¶¨½ø³ÌµÄ°²È«ÊôÐÔ£¬¼Ì³ÐÐÅÏ¢£¬ÀàµÄÓÅÏȼ¶µÈµÈ.À´¿´¸öºÜ¼òµ¥µÄ Example:
       STARTUPINFO stinfo;   //Æô¶¯´°¿ÚµÄÐÅÏ¢
       PROCESSINFO procinfo;  //½ø³ÌµÄÐÅÏ¢

     CreateProcess(NULL,_T("notepad.exe"),NULL,NULL.FALSE, NORMAL_PRIORITY_
       CLASS,NULL,NULL, &stinfo,&procinfo);

    6. È·¶¨Ó¦ÓóÌÐòµÄ Â·¾¶
       Ç°Ð©ÌìºÃÏóÓÐÈËÎʹýÕâ¸öÎÊÌâ.
        Use GetModuleFileName »ñµÃÓ¦ÓóÌÐòµÄ·¾¶£¬È»ºóÈ¥µô¿ÉÖ´ÐÐÎļþÃû¡£
          Example:
           TCHAR exeFullPath[MAX_PATH]; // MAX_PATHÔÚAPIÖж¨ÒåÁË°É£¬ºÃÏóÊÇ128
           GetModuleFileName(NULL,exeFullPath,MAX_PATH)

     7. »ñµÃ¸÷ÖÖĿ¼ÐÅÏ¢
        WindowsĿ¼: Use "GetWindowsDirectory¡°
        WindowsϵÄsystemĿ¼: Use "GetSystemDirectory"
        tempĿ¼: Use "GetTempPath "
         µ±Ç°Ä¿Â¼: Use "GetCurrentDirectory"
       Çë×¢ÒâÇ°Á½¸öº¯ÊýµÄµÚÒ»¸ö²ÎÊýΪ Ä¿Â¼±äÁ¿Ãû£¬ºóÒ»¸öΪ»º³åÇø; ºóÁ½¸öÏà·´.

     8. ÈçºÎ×Ô¶¨ÒåÏûÏ¢
        Ò²ÓÐÈËÎʹýµÄ£¬Æäʵ²»ÄÑ¡£
          (1) ÊÖ¹¤¶¨ÒåÏûÏ¢£¬¿ÉÒÔÕâôд #define WM_MY_MESSAGE(WM_USER+100),
            MS ÍƼöµÄÖÁÉÙÊÇ WM_USER+100;
          (2)дÏûÏ¢´¦Àíº¯Êý,ÓàWPARAM,LPARAM·µ»ØLRESULT.
             LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam)
              {

                //¼ÓÈëÄãµÄ´¦Àíº¯Êý
              }
           (3)  ÔÚÀàµÄ AFX_MSG´¦½øÐÐÉùÃ÷£¬Ò²¾ÍÊdz£ËµµÄ"ºêÓ³Éä"

     ¿ªÆª¾ÍÏÈдµ½Õâ.
      ´ýÐø...

    ÓеãÃÔ㯣¬ÓеãʧÍû
   ²»ÏëÕÅÍû£¬²»Ïë»ÃÏëÄ.

--
¡ù À´Ô´:¡¤BBS Ë®Ä¾Ç廪վ bbs.net.tsinghua.edu.cn¡¤[FROM: sapphire.ncic.a]

--
¡ù À´Ô´:¡¤¹þ¶û±õ×϶¡ÏãÕ¾ bbs1.hit.edu.cn¡¤[FROM: compus.bbs@bbs.net.t] 
[°Ù±¦Ïä] [·µ»ØÊ×Ò³] [Éϼ¶Ä¿Â¼] [¸ùĿ¼] [·µ»Ø¶¥²¿] [Ë¢ÐÂ] [·µ»Ø]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
Ò³ÃæÖ´ÐÐʱ¼ä£º3.189ºÁÃë