我用mfc寫了一個richedit類,是從CRichEditCtrl繼承來的,代碼很簡單,生成dll給exe呼叫。
測驗發現:
1.在win8,win10,windows2012,windows2016上,只要第一次在richedit的框里點一下滑鼠,整個視窗就會假死10多秒,沒有回應,然后就正常了。
2.winxp win7 win2003 win2008下怎么點擊都正常。
3.把CTraceServiceControl類直接寫到exe里面呼叫,一切正常。
監視richedit的訊息,點擊后,會收到MSIMEQueryPosition(行號000236),這里要卡很久,然后才是000237,應該是和輸入法有關,請問誰有辦法解決嗎?感謝大家
代碼下載:http://9ijj.com/test.zip
結果如下:
<000204> 00311312 S WM_SETCURSOR hwnd:00311312 nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE
<000205> 00311312 R WM_SETCURSOR fHaltProcessing:True
<000206> 00311312 P WM_MOUSEMOVE fwKeys:MK_LBUTTON xPos:142 yPos:177
<000207> 00311312 P EM_SETPUNCTUATION fType:PC_DELIMITER punctTable:00000010
<000208> 00311312 S EM_GETLINECOUNT
<000209> 00311312 R EM_GETLINECOUNT cLines:1
<000210> 00311312 S EM_EXGETSEL lpchr:00DAB7D4
<000211> 00311312 R EM_EXGETSEL
<000212> 00311312 S EM_GETTEXTLENGTHEX pgtle:00DAB7BC
<000213> 00311312 R EM_GETTEXTLENGTHEX nLength:0
<000214> 00311312 S EM_EXSETSEL lpchr:00DAB7BC
<000215> 00311312 R EM_EXSETSEL
<000216> 00311312 S EM_SETCHARFORMAT uFlags:SCF_SELECTION lpFmt:00DAB820
<000217> 00311312 R EM_SETCHARFORMAT fSucceeded:True
<000218> 00311312 S EM_REPLACESEL lpszReplace:00CAE328 ("【 2016-12-16 20:28:11 】")
<000219> 00311312 R EM_REPLACESEL
<000220> 00311312 S EM_EXGETSEL lpchr:00DAB7D4
<000221> 00311312 R EM_EXGETSEL
<000222> 00311312 S EM_GETTEXTLENGTHEX pgtle:00DAB7BC
<000223> 00311312 R EM_GETTEXTLENGTHEX nLength:23
<000224> 00311312 S EM_EXSETSEL lpchr:00DAB7BC
<000225> 00311312 R EM_EXSETSEL
<000226> 00311312 S EM_SETCHARFORMAT uFlags:SCF_SELECTION lpFmt:00DAB820
<000227> 00311312 R EM_SETCHARFORMAT fSucceeded:True
<000228> 00311312 S EM_REPLACESEL lpszReplace:00CAE348 ("獲得焦點")
<000229> 00311312 R EM_REPLACESEL
<000230> 00311312 P WM_VSCROLL nScrollCode:SB_BOTTOM hwndScrollBar:(null)
<000231> 00311312 P WM_VSCROLL nScrollCode:SB_BOTTOM hwndScrollBar:(null)
<000232> 00311312 P WM_PAINT hdc:00000000
<000233> 00311312 S message:0xC055 [已注冊:"MSIMEQueryPosition"] wParam:00000001 lParam:00DAAEE0
<000234> 00311312 R message:0xC055 [已注冊:"MSIMEQueryPosition"] lResult:00000001
<000235> 00311312 S message:0xC055 [已注冊:"MSIMEQueryPosition"] wParam:00000001 lParam:00DAAEDC
<000236> 00311312 R message:0xC055 [已注冊:"MSIMEQueryPosition"] lResult:00000001
<000237> 00311312 S WM_IME_NOTIFY dwCommand:IMN_SETOPENSTATUS dwCommand:00000008 dwData:00000000
<000238> 00311312 R WM_IME_NOTIFY
<000239> 00311312 S WM_NCHITTEST xPos:610 yPos:474
<000240> 00311312 R WM_NCHITTEST nHittest:HTCLIENT
<000241> 00311312 S WM_NCHITTEST xPos:610 yPos:474
<000242> 00311312 R WM_NCHITTEST nHittest:HTCLIENT
<000243> 00311312 S WM_SETCURSOR hwnd:00311312 nHittest:HTCLIENT wMouseMsg:WM_LBUTTONUP
<000244> 00311312 R WM_SETCURSOR fHaltProcessing:True
<000245> 00311312 P WM_LBUTTONUP fwKeys:0000 xPos:142 yPos:177
<000246> 00311312 S WM_GETDLGCODE
<000247> 00311312 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTTAB | DLGC_WANTALLKEYS | DLGC_HASSETSEL | DLGC_WANTCHARS
<000248> 00311312 S WM_KILLFOCUS hwndGetFocus:(null)
<000249> 00311312 R WM_KILLFOCUS
<000250> 00311312 S WM_IME_SETCONTEXT fSet:0 iShow:C000000F
<000251> 00311312 S WM_IME_NOTIFY dwCommand:IMN_CLOSESTATUSWINDOW dwCommand:00000001 dwData:00000000
<000252> 00311312 R WM_IME_NOTIFY
<000253> 00311312 R WM_IME_SETCONTEXT
<000254> 00311312 P EM_SETPUNCTUATION fType:PC_DELIMITER punctTable:00000010
<000255> 00311312 S EM_GETLINECOUNT
<000256> 00311312 R EM_GETLINECOUNT cLines:2
<000257> 00311312 S EM_EXGETSEL lpchr:00DAB7D4
<000258> 00311312 R EM_EXGETSEL
<000259> 00311312 S EM_GETTEXTLENGTHEX pgtle:00DAB7BC
<000260> 00311312 R EM_GETTEXTLENGTHEX nLength:28
<000261> 00311312 S EM_EXSETSEL lpchr:00DAB7BC
<000262> 00311312 R EM_EXSETSEL
<000263> 00311312 S EM_SETCHARFORMAT uFlags:SCF_SELECTION lpFmt:00DAB820
<000264> 00311312 R EM_SETCHARFORMAT fSucceeded:True
<000265> 00311312 S EM_REPLACESEL lpszReplace:00CAE328 ("【 2016-12-16 20:28:25 】")
<000266> 00311312 R EM_REPLACESEL
<000267> 00311312 S EM_EXGETSEL lpchr:00DAB7D4
<000268> 00311312 R EM_EXGETSEL
<000269> 00311312 S EM_GETTEXTLENGTHEX pgtle:00DAB7BC
<000270> 00311312 R EM_GETTEXTLENGTHEX nLength:51
<000271> 00311312 S EM_EXSETSEL lpchr:00DAB7BC
<000272> 00311312 R EM_EXSETSEL
<000273> 00311312 S EM_SETCHARFORMAT uFlags:SCF_SELECTION lpFmt:00DAB820
<000274> 00311312 R EM_SETCHARFORMAT fSucceeded:True
<000275> 00311312 S EM_REPLACESEL lpszReplace:00CAE348 ("失去焦點")
<000276> 00311312 R EM_REPLACESEL
uj5u.com熱心網友回復:
卡住的時候點"暫停", 然后看callstack, 看卡在哪uj5u.com熱心網友回復:
沒準只是因為少某個字體。我猜。或者控制元件注冊不對。
uj5u.com熱心網友回復:
在64位Windows下:64位exe和dll在目錄c:\windows\system32目錄下;
32位exe和dll在目錄c:\windows\syswow64目錄下;
所以要注意:
在win64位系統下注冊32位ocx或dll需要將32位ocx或dll拷貝到c:\windows\syswow64\目錄下。
且注冊要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
uj5u.com熱心網友回復:
直接在exe創建一個繼承類,是沒問題的,所以字體,控制元件原因可以排除uj5u.com熱心網友回復:
win10需要打補丁?uj5u.com熱心網友回復:
補丁最新的uj5u.com熱心網友回復:
卸載“微軟拼音輸入法”就好了uj5u.com熱心網友回復:
安裝其他輸入法,反正不要用“微軟拼音輸入法”就好了轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/59497.html
標籤:界面
