none
xp 与 win8中 ,子控件的文本在弹出一个窗口后消失 ,win7正常!非常费解 RRS feed

  • 问题

  • 呵呵,因为大侠说在这边也许能得到正解,就发过来看看

    我做了一个用户控件里面放了一个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!

    2013年1月11日 9:21

答案

  • 今天还发现了,如果usercontrol的只读属性是false,而且里面有光标的话,字就不会消失。似乎重绘是有些情况下,进行的。

    Just On Life!

    目前就利用上述情况,让鼠标进入时把焦点设过来,然后用api隐藏了光标,这样字就不会消失了.

    但是对于原理仍然不甚清楚,只是取了个巧.



    Just On Life!

    2013年1月17日 8:01

全部回复

  • 这个问题解决起来太费力了,你不知道是DLL的版本问题还是你程序继承了的问题

    建议这种控件还是直接用Qt比较简单


    0xDEADBEEF

    2013年1月13日 13:49
    版主
  • 这个问题解决起来太费力了,你不知道是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!

    2013年1月14日 2:18
  • 你的问题是不是这样:你编写的 CustomRichTextBox 在窗体或控件中能够正常显示文本,但是放到对话框中就无法显示文本了?

    2013年1月14日 7:16
  • 你的问题是不是这样:你编写的 CustomRichTextBox 在窗体或控件中能够正常显示文本,但是放到对话框中就无法显示文本了?

    大大~~ 谢谢回复

    我的程序在skydriver上有,文本一般情况下时能正常显示的,只是在有超文本链接时,我定义了个eventhandler,按那个链接会弹出一个对话框,弹出对话框后,后面的那个richtextbox中的文本就会消失,当然只是在win8 xp下如此,win7是正常的,似乎重绘有什么问题


    Just On Life!

    2013年1月15日 2:33
  • 你的问题是不是这样:你编写的 CustomRichTextBox 在窗体或控件中能够正常显示文本,但是放到对话框中就无法显示文本了?

    大大~~ 谢谢回复

    我的程序在skydriver上有,文本一般情况下时能正常显示的,只是在有超文本链接时,我定义了个eventhandler,按那个链接会弹出一个对话框,弹出对话框后,后面的那个richtextbox中的文本就会消失,当然只是在win8 xp下如此,win7是正常的,似乎重绘有什么问题


    Just On Life!


    你做个测试,不要弹出一个对话框,而是通过 Show 显示一个窗体。
    2013年1月15日 2:59
  • 你的问题是不是这样:你编写的 CustomRichTextBox 在窗体或控件中能够正常显示文本,但是放到对话框中就无法显示文本了?

    大大~~ 谢谢回复

    我的程序在skydriver上有,文本一般情况下时能正常显示的,只是在有超文本链接时,我定义了个eventhandler,按那个链接会弹出一个对话框,弹出对话框后,后面的那个richtextbox中的文本就会消失,当然只是在win8 xp下如此,win7是正常的,似乎重绘有什么问题


    Just On Life!


    你做个测试,不要弹出一个对话框,而是通过 Show 显示一个窗体。
    一样的,我试过了,模式窗体也会有同样的问题

    Just On Life!

    2013年1月15日 5:21
  • 我这里没有XP,也没有Win8,只在Win2003上跑了下,也没有问题。

    你在xp下调是夏程序,看看是否有异常。

    2013年1月15日 5:42
  • 我这里没有XP,也没有Win8,只在Win2003上跑了下,也没有问题。

    你在xp下调是夏程序,看看是否有异常。

    我这里没有xp的机器了,但是前阵子测试组说在xp和win8下是一样的。


    Just On Life!

    2013年1月16日 6:05
  • 今天还发现了,如果usercontrol的只读属性是false,而且里面有光标的话,字就不会消失。似乎重绘是有些情况下,进行的。

    Just On Life!

    2013年1月16日 6:06
  • 今天还发现了,如果usercontrol的只读属性是false,而且里面有光标的话,字就不会消失。似乎重绘是有些情况下,进行的。

    Just On Life!

    目前就利用上述情况,让鼠标进入时把焦点设过来,然后用api隐藏了光标,这样字就不会消失了.

    但是对于原理仍然不甚清楚,只是取了个巧.



    Just On Life!

    2013年1月17日 8:01
  • 呵呵,这两天又测试了下,跟只读属性没有关系,只和光标有关

    Just On Life!

    2013年1月22日 2:09