»¶ÓÄú·ÃÎÊÎÒ°®IT¼¼ÊõÍø£¬½ñÌìС±àΪÄã·ÖÏíµÄ±à³Ì¼¼ÊõÊÇ£º¡¾½«·Çģ̬¶Ô»°¿òÏÔʾΪģ̬¶Ô»°¿ò¡¿£¬ÏÂÃæÊÇÏêϸµÄ·ÖÏí£¡
½«·Çģ̬¶Ô»°¿òÏÔʾΪģ̬¶Ô»°¿ò
1¡¢Òâͼ
ÓÐʱºòÎÒÃÇÏ£Íû½«·Çģ̬´°¿ÚÏÔʾΪģ̬´°¿Ú¡£±ÈÈçÔÚIEµÄ“Îļþ”²Ëµ¥ÏÂÑ¡Ôñ“´òÓ¡”£¬µ¯³öµÄ“´òÓ¡”¶Ô»°¿ò¾ÍÊÇ·Çģ̬µÄ£¨Ò²ÐíÎÒÃDz»Ì«Çå³þMicrosoftµÄÉè¼ÆÒâͼ£¬Ò»°ãÀ´ËµÕâÀïµÄ“´òÓ¡”¶Ô»°¿òÓ¦¸ÃÊÇģ̬µÄ£©¡£ÕâÖÖÇé¿öÏÂÈçºÎ½«“´òÓ¡”¶Ô»°¿òÏÔʾΪģ̬µÄÄØ£¨Õâ¸ö¶Ô»°¿ò¶ÔÎÒÃÇÀ´ËµÊÇBlack Box£©£¿
2¡¢¼òµ¥ÊµÏÖ
¼òµ¥µØËµ£¬Ä£Ì¬´°¿ÚÏÔʾʱ£¬Æä¸¸´°¿ÚÊDZ»DisableµÄ£¬ËùÒÔģ̬´°¿Ú²Å³ÊÏ֓ģ̬”£¬ËùÒÔÖ»ÒªÔÚÏÔʾÎÒÃÇ·Çģ̬´°¿Úǰ½«¸¸´°¿ÚDisable¼´¿ÉʵÏÖ£¬ÈçÏ£º
| ÒÔÏÂΪÒýÓõÄÄÚÈÝ£º ¡¡¡¡…… ¡¡¡¡AfxGetMainWnd()->EnableWindow(FALSE);//½«Ö÷´°¿ÚDisable£¬ÏÔʾ³öµÄ·Çģ̬´°¿Ú¾Í±ä³Éģ̬µÄÁË ¡¡¡¡ShowModelessWindow(); ¡¡¡¡…… |
ÎÊÌâÔÚÓÚ·Çģ̬´°¿ÚÏÔʾ֮ºóÊÇÁ¢¼´·µ»ØµÄ£¬ÄÇÎÒÃǽ«¸¸´°¿ÚEnableµÄ´úÂë·ÅÔÚÄÄÀïÄØ£¿±¿°ì·¨ÊÇÓÃʱÖÓ£¬²»¶ÏµØ¼ì²âÏÔʾ³öÀ´µÄ·Çģ̬´°¿ÚÊÇ·ñÒѾ¹Ø±Õ£¬Èô¹Ø±ÕÔò½«¸¸´°¿ÚEnable¡£
µ±È»£¬»¹Òª¸üºÃµÄ°ì·¨¡£
3¡¢WH_CBT Hook
WH_CBT¹³×ÓµÄÏêϸ˵Ã÷Çë²ÎÔÄMSDN£¬ÎÒÃǽö½öÐèÒªÖªµÀµÄÊÇÔÚ´°¿Ú´´½¨¡¢Ïú»Ù֮ǰϵͳ¶¼»áµ÷ÓùÒÉÏÁËWH_CBTµÄ¹³×Óº¯Êý£¬ÕâÕýÊÇÎÒÃÇÐèÒªµÄ¡£¾ßÌå¾ÍÊÇÔÚÏÔʾ·Çģ̬´°¿Ú֮ǰ¹ÒÉÏÎÒÃǵÄWH_CBT¹³×Ó´¦Àíº¯Êý£¬Ö®ºó·Çģ̬´°¿Ú´´½¨µÄ¾ä±ú¾Í¿ÉÒÔÔÚ¹³×Óº¯ÊýµÄnCodeΪHCBT_CREATEWND£¨´´½¨´°¿Ú£©Ê±´ÓwParam²ÎÊý»ñµÃ£¬½«Æä±£´æÏÂÀ´£¬²¢ÔÚ¹³×Óº¯ÊýµÄnCodeΪHCBT_DESTROYWND£¨Ïú»Ù´°¿Ú£©Ê±ÓëwParam²ÎÊý½øÐбȽϣ¬Èç¹ûÆ¥ÅäÔò»Ö¸´Ö÷´°¿ÚµÄEnable״̬¡£
2¡¢ÊµÏÖ
1)Ê×Ïȶ¨ÒåÁ½¸ö±äÁ¿£¬´Ë´¦ÎªÈ«¾Ö¾²Ì¬±äÁ¿¡£
| ÒÔÏÂΪÒýÓõÄÄÚÈÝ£º ¡¡¡¡static HHOOK g_hHook=NULL; ¡¡¡¡static HWND g_hWndDialog=NULL;//ÓÃÒÔ±£´æ´°¿Ú¾ä±ú |
2)ÔÙÌí¼ÓÒ»¸öº¯ÊýCbtProc£¬ÓÉÓÚÊǻص÷º¯Êý£¬×¢ÒâÒªÉùÃ÷Ϊstatic¡£
static LRESULT CALLBACK CbtProc(int nCode, WPARAM wParam, LPARAM lParam);
3)¹Ò¹³
¼ÙÉèÏÂÃæÊÇÎÒÃǵÄij¸öä¯ÀÀÆ÷Öе÷ÓÓ´òÓ¡”¶Ô»°¿òµÄº¯Êý
| ÒÔÏÂΪÒýÓõÄÄÚÈÝ£º ¡¡¡¡void CMyHtmlView::OnFilePrint() ¡¡¡¡{ ¡¡¡¡AfxGetMainWnd()->EnableWindow(FALSE); ¡¡¡¡g_hWndDialog=0; //¿ÉÄܶà´Îµ÷Óã¬ÐèÒªÖØÖñ£´æ´°¿Ú¾ä±úµÄ±äÁ¿ ¡¡¡¡g_hHook=SetWindowsHookEx(WH_CBT, CbtProc, NULL, GetCurrentThreadId()); ¡¡¡¡if (!g_hHook) ¡¡¡¡{ ¡¡¡¡AfxGetMainWnd()->EnableWindow(TRUE); ¡¡¡¡return; ¡¡¡¡} |
µ÷ÓÓ´òÓ¡”¶Ô»°¿ò
| ÒÔÏÂΪÒýÓõÄÄÚÈÝ£º ¡¡¡¡} ¡¡¡¡LRESULT CALLBACK CMyHtmlView::CbtProc(int nCode, WPARAM wParam, LPARAM lParam) ¡¡¡¡{ ¡¡¡¡switch (nCode) ¡¡¡¡{ ¡¡¡¡case HCBT_CREATEWND: ¡¡¡¡{ ¡¡¡¡HWND hWnd=(HWND)wParam; ¡¡¡¡LPCBT_CREATEWND pcbt=(LPCBT_CREATEWND)lParam; ¡¡¡¡LPCREATESTRUCT pcs=pcbt->lpcs;
¡¡¡¡if ((DWORD)pcs->lpszClass==0x00008002)//#32770£¬“´òÓ¡”¶Ô»°¿òÀàÃû ¡¡¡¡{ ¡¡¡¡if ( g_hWndDialog==0 ) ¡¡¡¡g_hWndDialog=hWnd; // Ö»±£´æÒ»´Î±£´æ“´òÓ¡”´°¿ÚµÄ¾ä±ú ¡¡¡¡} ¡¡¡¡break; ¡¡¡¡} ¡¡¡¡case HCBT_DESTROYWND: ¡¡¡¡{ ¡¡¡¡HWND hwnd=(HWND)wParam; ¡¡¡¡if (hwnd==g_hWndDialog) ¡¡¡¡{ ¡¡¡¡AfxGetMainWnd()->EnableWindow(TRUE);//»Ö¸´´°¿Ú״̬ ¡¡¡¡UnhookWindowsHookEx(g_hHook);//È¥³ý¹Ò¹³ ¡¡¡¡} ¡¡¡¡break; ¡¡¡¡} ¡¡¡¡} ¡¡¡¡return CallNextHookEx(g_hHook, nCode, wParam, lParam); ¡¡¡¡} |
ºÜ¼òµ¥°É£¬¸üÖØÒªµÄÊÇÕâÖÖ·½·¨È·ÊµÓÐЧ¡£
ÒÔÉÏËù·ÖÏíµÄÊǹØÓÚ½«·Çģ̬¶Ô»°¿òÏÔʾΪģ̬¶Ô»°¿ò£¬ÏÂÃæÊDZà¼ÎªÄãÍÆ¼öµÄÓмÛÖµµÄÓû§»¥¶¯£º
¡¡¡¡Ïà¹ØÎÊÌ⣺MFCÖÐ ·Çģ̬¶Ô»°¿òÈçºÎ´´½¨ºÍÏÔʾ?
¡¡¡¡´ð£ºÊ¹Ó÷Çģ̬¶Ô»°¿ò¡£¼ÙÉèÄ㶨ÒåµÄ¶Ô»°¿òΪ CDlg; cpp/h/×ÊÔ´Îļþ¶¼¶¨ÒåºÃÁË¡£ CDlg* pOneDlgObj = new CDlg; if ( pOneDlgObj) { BOOL ret = pOneDlgObj->Create(IDD_MYDIALOG,this); } pOneDlgObj->ShowWindow(SW_SHOW); ÕâÑù¾ÍÐÐÁË£¬IDD_MYDIAL... >>Ïêϸ
¡¡¡¡Ïà¹ØÎÊÌ⣺ģ̬¶Ô»°¿òÓë·Çģ̬¶Ô»°¿òµÄÇø±ð Òª¾«º·µÄ ²»Òª³¤...
¡¡¡¡´ð£ºÄ£Ì¬¶Ô»°¿ò ²Ù×÷ģʽÉÏÀ´½² ģ̬¶Ô»°¿òÔڹرնԻ°¿ò(OnOk,OnCancel,OnClose)ÕâÈý¸öÏûÏ¢²úÉú֮ǰ²»¿É¶Ô´Ë¶Ô»°¿òÒÔÍâµÄ¶Ô»°¿ò½øÐвÙ×÷ µ±ÉÏÃæ3¸öÏûÏ¢²úÉúºóϵͳ¸ºÔðɾ³ýģ̬¶Ô»°¿ò×ÊÔ´ ¶ø·Çģ̬¶Ô»°¿ò¿ÉÒÔ½øÐÐÆäËû²Ù×÷ ±ØÐëÔÚÈý¸öÏûÏ¢·¢Éúºó×Ô¼ºÔÚ... >>Ïêϸ
¡¡¡¡Ïà¹ØÎÊÌ⣺ģ̬¶Ô»°¿òºÍ·Çģ̬¶Ô»°¿òÓÐÊ²Ã´Çø±ð ¾ÙÀý˵Ã÷
¡¡¡¡´ð£ºwordÖеġ°Áí´æÎª¡±¶Ô»°¿ò¾ÍÊÇģ̬¶Ô»°¿ò£¬Äã²»°ÑËü¹Ø±Õ£¬²»ÄܽøÐÐÆäËû²Ù×÷¡£ wordÖеġ°²éÕÒÓëÌæ»»¡±¶Ô»°¿ò¾ÍÊÇ·Çģ̬¶Ô»°¿ò£¬Äã²»°ÑËü¹Ø±Õ£¬ÄܽøÐÐÆäËû²Ù×÷¡£ >>Ïêϸ
- ÆÀÂÛÁÐ±í£¨ÍøÓÑÆÀÂÛ½ö¹©ÍøÓѱí´ï¸öÈË¿´·¨£¬²¢²»±íÃ÷±¾Õ¾Í¬ÒâÆä¹Ûµã»ò֤ʵÆäÃèÊö£©
-
