自己做了一个UserControl,BackStyle=透明,Windowless=true,在设计时,无法通过点击来选择该控件,只能"框选"或通过在"属性"下拉列表中进行选择.
这是为什么? 如何能够被"点选"

解决方案 »

  1.   

    但是我需要透明效果呀,所以又必须Windowless=true,有其它办法解决这个问题吗?
      

  2.   

    只这一句就可实现透明 UserControl,BackStyle=透明呀?虽然不可以点选,可是可以用鼠标框选。
      

  3.   

    "只这一句就可实现透明 UserControl,BackStyle=透明呀?"
    -------------------------------------------------------
    简单的讲,我是想做一个Label。我实现的方法大致如下:
    在Usercontrol设计时,
    Usercontrol.BackStyle=0
    UserControl.ClipBehavior = 0
    Usercontrol.Windowless=TruePrivate Sub UserControl_Paint()
      UserControl.Cls
      Print "Caption"
    End Sub
    如果仅仅设置Usercontrol.BackStyle=0,"Caption"无法显示。有什么办法可以不设置Usercontrol.Windowless=True,就可以显示"Caption"吗?因为Windowless=True,则hwnd=0,不仅无法点选,而且很多API都用不了了。"虽然不可以点选,可是可以用鼠标框选。"
    -------------------------------------------------------
      

  4.   

    上帖写错了,特此更正:
    "只这一句就可实现透明 UserControl,BackStyle=透明呀?"
    -------------------------------------------------------
    简单的讲,我是想做一个Label。我实现的方法大致如下:
    在Usercontrol设计时,
    Usercontrol.BackStyle=0
    UserControl.ClipBehavior = 0
    Usercontrol.Windowless=TruePrivate Sub UserControl_Paint()
      UserControl.Cls
      Print "Caption"
    End Sub
    如果仅仅设置Usercontrol.BackStyle=0,"Caption"无法显示。有什么办法可以不设置Usercontrol.Windowless=True就可以显示"Caption"吗?
    因为Windowless=True,则hwnd=0,有如下问题:
    1.无法点选
    2.很多API都不成。
    3.MouseIcon无法实现"虽然不可以点选,可是可以用鼠标框选。"
    -------------------------------------------------------
    不能点选,同时也就不能拖动控件,在窗体设计时很不方便呀!
      

  5.   

    你直接在窗体放一个label令label1.BackStyle=0,这时label也变的透明了label1.caption=“内容"估计这样能实现你的要求
      

  6.   

    哈哈,我猜到你要说这种办法.但是,不行!
    问题:多数字体显示不全。
    不信您可以试试:
    Font="宋体"/常规/小五号
    Font="揩体"/常规/小五号
    ...目前,不能"点选"是次要的,关键是因为Windowless=True,导致usercontol.Mouse_click无法响应及MouseIcon无法正常使用.
    还有没有其它办法?
      

  7.   

    对!
    看来,用API试试。别先结帖。我研究研究!
      

  8.   

    我发现做透明控件与做不透明控件在很多地方有不同之处,而且处理这些不同之处相当困难,我做个总结:
    问题一:Caption
    如果要实现透明控件类似于Label的Caption,我现在有两个方案,但是这两个方案都有点问题:
    方案1:Print "Caption"
    Private Sub UserControl_Paint()
      UserControl.Cls
      Print "Caption"
    End Sub
    为了实现Usercontrol的透明,则必须对以下属性做设置(缺一不可):
    Usercontrol.BackStyle=0
    UserControl.ClipBehavior = 0
    Usercontrol.Windowless=True
    好,问题出来一大堆...具体的请看问题二、问题三、问题四!
    方案2:在UserControl中直接放Label:
    为了实现Usercontrol的透明,必须将Usercontrol和Label都设置为BackStyle="0"
    问题:多数字体显示不全。如字体="宋规五"、字体="楷规五",除非字体是粗体,且字号较大,则不 怎么看不出字体不全。
    ?????:不知道还有没有其它办法可以实现透明的Caption?问题二:BackStyle
    当BackStyle=0(透明)时,UserControl不响应MouseDown、MouseUp、MouseClick事件,只是HitTest事件;同时MousePointer、MouseIcon属性无效。为什么MousePointer、MouseIcon无效?而Label都有这些属性和事件呀?
    ?????:如何判断透明控件的MouseDown、MouseUp、MouseClick事件?如何给透明控件添加MouseIcon、MousePoiont属性?问题三:Windowless
    如果Windowless=True,则Usercontrol的hwnd=0,这就导致:
    1、很多API都用不成;
    比如,通常判断鼠标在控件上的“移进”(MouseOver),“移出”(MouseOut),都用Setcapture。这下,就只能通过timer控件和GetCursorPos来完成了,比用Setcapture多用了一个Timer,不爽!
    2、在设计时,控件不可以“点选”
    在设计时,无法通过点击来选择该控件,只能"框选"或通过在"属性"下拉列表中进行选择。
    ?????:Windowless=True时,如何实现“点选”?问题四:AutoRedraw
    当Usercontrol.BackStyle=0 And UserControl.ClipBehavior = 0 And Usercontrol.Windowless=True时,无法设置AutoRedraw=True。
    ?????但是我又需要用到AutoRedraw=True,如需要用存储在内存中的图象进行重绘,怎么办?
      

  9.   

    yefanqiu(叶帆) :
    我将这些问题另起了一帖,不如我先将该帖结了,到那里讨论?
    http://expert.csdn.net/Expert/topic/1650/1650531.xml?temp=.7091638
      

  10.   

    好的,我研究了一天,也没有什么收获。
    不过我问一下:
    Usercontrol.Windowless=True 一定要设么?
    我不设,也可以实现透明也?
      

  11.   

    100分,不少哦!一定要锁定频道:
    http://expert.csdn.net/Expert/topic/1650/1650531.xml?temp=.7091638