richedit控件在win10下获得焦点的时候会假死10几秒?

[复制链接]
查看11 | 回复8 | 2021-1-27 05:14:18 | 显示全部楼层 |阅读模式
我用mfc写了一个richedit类,是从CRichEditCtrl继承来的,代码很简单,生成dll给exe调用。
测试发现:
1.在win8,win10,windows2012,windows2016上,只要第一次在richedit的框里点一下鼠标,整个窗口就会假死10多秒,没有响应,然后就正常了。
2.winxpwin7win2003win2008下怎么点击都正常。
3.把CTraceServiceControl类直接写到exe里面调用,一切正常。
监视richedit的消息,点击后,会收到MSIMEQueryPosition(行号000236),这里要卡很久,然后才是000237,应该是和输入法有关,请问谁有办法解决吗?感谢大家
代码下载:http://9ijj.com/test.zip
结果如下:
00311312SWM_SETCURSORhwnd:00311312nHittest:HTCLIENTwMouseMsg:WM_MOUSEMOVE
00311312RWM_SETCURSORfHaltProcessing:True
00311312PWM_MOUSEMOVEfwKeys:MK_LBUTTONxPos:142yPos:177
00311312PEM_SETPUNCTUATIONfType:PC_DELIMITERpunctTable:00000010
00311312SEM_GETLINECOUNT
00311312REM_GETLINECOUNTcLines:1
00311312SEM_EXGETSELlpchr:00DAB7D4
00311312REM_EXGETSEL
00311312SEM_GETTEXTLENGTHEXpgtle:00DAB7BC
00311312REM_GETTEXTLENGTHEXnLength:0
00311312SEM_EXSETSELlpchr:00DAB7BC
00311312REM_EXSETSEL
00311312SEM_SETCHARFORMATuFlags:SCF_SELECTIONlpFmt:00DAB820
00311312REM_SETCHARFORMATfSucceeded:True
00311312SEM_REPLACESELlpszReplace:00CAE328("【2016-12-1620:28:11】")
00311312REM_REPLACESEL
00311312SEM_EXGETSELlpchr:00DAB7D4
00311312REM_EXGETSEL
00311312SEM_GETTEXTLENGTHEXpgtle:00DAB7BC
00311312REM_GETTEXTLENGTHEXnLength:23
00311312SEM_EXSETSELlpchr:00DAB7BC
00311312REM_EXSETSEL
00311312SEM_SETCHARFORMATuFlags:SCF_SELECTIONlpFmt:00DAB820
00311312REM_SETCHARFORMATfSucceeded:True
00311312SEM_REPLACESELlpszReplace:00CAE348("获得焦点")
00311312REM_REPLACESEL
00311312PWM_VSCROLLnScrollCode:SB_BOTTOMhwndScrollBar:(null)
00311312PWM_VSCROLLnScrollCode:SB_BOTTOMhwndScrollBar:(null)
00311312PWM_PAINThdc:00000000
00311312Smessage:0xC055[已注册:"MSIMEQueryPosition"]wParam:00000001lParam:00DAAEE0
00311312Rmessage:0xC055[已注册:"MSIMEQueryPosition"]lResult:00000001
00311312Smessage:0xC055[已注册:"MSIMEQueryPosition"]wParam:00000001lParam:00DAAEDC
00311312Rmessage:0xC055[已注册:"MSIMEQueryPosition"]lResult:00000001
00311312SWM_IME_NOTIFYdwCommand:IMN_SETOPENSTATUSdwCommand:00000008dwData:00000000
00311312RWM_IME_NOTIFY
00311312SWM_NCHITTESTxPos:610yPos:474
00311312RWM_NCHITTESTnHittest:HTCLIENT
00311312SWM_NCHITTESTxPos:610yPos:474
00311312RWM_NCHITTESTnHittest:HTCLIENT
00311312SWM_SETCURSORhwnd:00311312nHittest:HTCLIENTwMouseMsg:WM_LBUTTONUP
00311312RWM_SETCURSORfHaltProcessing:True
00311312PWM_LBUTTONUPfwKeys:0000xPos:142yPos:177
00311312SWM_GETDLGCODE
00311312RWM_GETDLGCODEfuDlgCode:DLGC_WANTARROWS|DLGC_WANTTAB|DLGC_WANTALLKEYS|DLGC_HASSETSEL|DLGC_WANTCHARS
00311312SWM_KILLFOCUShwndGetFocus:(null)
00311312RWM_KILLFOCUS
00311312SWM_IME_SETCONTEXTfSet:0iShow:C000000F
00311312SWM_IME_NOTIFYdwCommand:IMN_CLOSESTATUSWINDOWdwCommand:00000001dwData:00000000
00311312RWM_IME_NOTIFY
00311312RWM_IME_SETCONTEXT
00311312PEM_SETPUNCTUATIONfType:PC_DELIMITERpunctTable:00000010
00311312SEM_GETLINECOUNT
00311312REM_GETLINECOUNTcLines:2
00311312SEM_EXGETSELlpchr:00DAB7D4
00311312REM_EXGETSEL
00311312SEM_GETTEXTLENGTHEXpgtle:00DAB7BC
00311312REM_GETTEXTLENGTHEXnLength:28
00311312SEM_EXSETSELlpchr:00DAB7BC
00311312REM_EXSETSEL
00311312SEM_SETCHARFORMATuFlags:SCF_SELECTIONlpFmt:00DAB820
00311312REM_SETCHARFORMATfSucceeded:True
00311312SEM_REPLACESELlpszReplace:00CAE328("【2016-12-1620:28:25】")
00311312REM_REPLACESEL
00311312SEM_EXGETSELlpchr:00DAB7D4
00311312REM_EXGETSEL
00311312SEM_GETTEXTLENGTHEXpgtle:00DAB7BC
00311312REM_GETTEXTLENGTHEXnLength:51
00311312SEM_EXSETSELlpchr:00DAB7BC
00311312REM_EXSETSEL
00311312SEM_SETCHARFORMATuFlags:SCF_SELECTIONlpFmt:00DAB820
00311312REM_SETCHARFORMATfSucceeded:True
00311312SEM_REPLACESELlpszReplace:00CAE348("失去焦点")
00311312REM_REPLACESEL

分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:14:18 | 显示全部楼层
卡住的时候点"暂停",然后看callstack,看卡在哪
回复

使用道具 举报

千问 | 2021-1-27 05:14:18 | 显示全部楼层
没准只是因为少某个字体。我猜。
或者控件注册不对。

回复

使用道具 举报

千问 | 2021-1-27 05:14:18 | 显示全部楼层
在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\regsvr32xxxxxxx.ocx或dll

回复

使用道具 举报

千问 | 2021-1-27 05:14:18 | 显示全部楼层
引用2楼赵4老师的回复:没准只是因为少某个字体。我猜。
或者控件注册不对。
直接在exe创建一个继承类,是没问题的,所以字体,控件原因可以排除
回复

使用道具 举报

千问 | 2021-1-27 05:14:18 | 显示全部楼层
win10需要打补丁?
回复

使用道具 举报

千问 | 2021-1-27 05:14:18 | 显示全部楼层
引用5楼赵4老师的回复:win10需要打补丁?补丁最新的
回复

使用道具 举报

千问 | 2021-1-27 05:14:18 | 显示全部楼层
卸载“微软拼音输入法”就好了
回复

使用道具 举报

千问 | 2021-1-27 05:14:18 | 显示全部楼层
安装其他输入法,反正不要用“微软拼音输入法”就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行