积极答复者
xp 与 win8中 ,子控件的文本在弹出一个窗口后消失 ,win7正常!非常费解

问题
-
呵呵,因为大侠说在这边也许能得到正解,就发过来看看
我做了一个用户控件里面放了一个richtextbox的继承的组件类
这个richtextbox的背景是透明的,具体是使用了覆盖控件初始化参数的方法
protected override CreateParams CreateParams
{
get
{
CreateParams prams = base.CreateParams;
if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
{
prams.ExStyle |= 0x020; // transparent
prams.ClassName = "RICHEDIT50W";
}
return prams;
}
}
现在有个问题,如果你先单击左边的组件类,会发现没有问题,但是单击右边的用户控件类会发现弹出对话框后,控件中的文字消失了.
这两个控件的不同在于,左边就是个组件类,而右边是一个用户控件类里面嵌入了左边的组件类.这个现象让我很费解,在win7上不会出现,但是xp和win8上会有,想请教一下高手,这是为什么?怎么来解决。
谢谢了!
程序放在了skydriver上
https://skydrive.live.com/?cid=A655FDCAA663C3BF&id=A655FDCAA663C3BF%21743#cid=A655FDCAA663C3BF&id=A655FDCAA663C3BF%21611似乎是父控件的某些消息没有传递给子控件...
richtextbox把字画出来的那部分,应该是richtextbox控件中paint中写的吧,我怎么能调用它,让它画出来呢?
不会让我在onpaint里面drawstring吧,那可毁了。
Just On Life!
答案
-
今天还发现了,如果usercontrol的只读属性是false,而且里面有光标的话,字就不会消失。似乎重绘是有些情况下,进行的。
Just On Life!
目前就利用上述情况,让鼠标进入时把焦点设过来,然后用api隐藏了光标,这样字就不会消失了.
但是对于原理仍然不甚清楚,只是取了个巧.
Just On Life!
- 已建议为答案 Elegentin XieModerator 2013年1月21日 8:09
- 已标记为答案 Elegentin XieModerator 2013年1月23日 9:53
全部回复
-
这个问题解决起来太费力了,你不知道是DLL的版本问题还是你程序继承了的问题
建议这种控件还是直接用Qt比较简单
0xDEADBEEF
谢谢您的回复~
这个richtextbox没有单独的dll,是windows.forms里面的
我的是C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Windows.Forms.dll
我看了下win7下也是如此,dll版本是一样的。
继承应该并不影响的,我是发现是继承后的组件放在usercontrol中才会有问题,呵呵,有兴趣您可以看看我的源码。
qt我没用过,希望能在现在的框架下解决问题~
Just On Life!
-
你的问题是不是这样:你编写的 CustomRichTextBox 在窗体或控件中能够正常显示文本,但是放到对话框中就无法显示文本了?
大大~~ 谢谢回复
我的程序在skydriver上有,文本一般情况下时能正常显示的,只是在有超文本链接时,我定义了个eventhandler,按那个链接会弹出一个对话框,弹出对话框后,后面的那个richtextbox中的文本就会消失,当然只是在win8 xp下如此,win7是正常的,似乎重绘有什么问题
Just On Life!
你做个测试,不要弹出一个对话框,而是通过 Show 显示一个窗体。Just On Life!
-
今天还发现了,如果usercontrol的只读属性是false,而且里面有光标的话,字就不会消失。似乎重绘是有些情况下,进行的。
Just On Life!
目前就利用上述情况,让鼠标进入时把焦点设过来,然后用api隐藏了光标,这样字就不会消失了.
但是对于原理仍然不甚清楚,只是取了个巧.
Just On Life!
- 已建议为答案 Elegentin XieModerator 2013年1月21日 8:09
- 已标记为答案 Elegentin XieModerator 2013年1月23日 9:53