大家都知道,文本框,列表框这些都是有焦点的控件,它们都有公共的特性。就是你可以通过TAB键和MOUSE单击等转到这个控件中,控件在得到输入焦点时,都会画出光标、虚线矩形以表示这个控件得到焦点。  如果我要用Label,shape这些控件来做一个有焦点的控件,如何去描述?包括:
1、 如何画虚线矩形?
2、 如何去在自定义控件处理TabShop属性和窗体上的其它控件一起协作运行?
3、 如何去接受窗体上的Tab、Shift+Tab等按键消息,得到这个自定义控件获得焦点的消息?

解决方案 »

  1.   

    有个API可能画出焦点虚框,好像是drawfocus??不是很记得了,可以查一下至于接收事件,做成ACTIVEX,是可以响应的
      

  2.   

    这呀...嘛烦!!!
    别人定义好的窗口类,想改真的很麻烦!
    建议你用usercontrol来写好了...你说的123除了1之外,其余的都实现了!
    在usercontrol的gotfocus那用API画也行用shape设置好属性显示,隐藏也行!lostfocus就是失去焦点时发生的事件了!API的话drawrocusrect这个吧,专用来画焦点的!调用一次显示,再用就消失了!不过我没用过,不清楚~呵呵
      

  3.   

    但是接收Tab,Shift+Tab这些消息呢?在控件中是如何做到?最好能举个简单的例子代码。
      

  4.   

    画焦点
    DrawFocusRect VB声明 
    Declare Function DrawFocusRect Lib "user32" Alias "DrawFocusRect" (ByVal hdc As Long, lpRect As RECT) As Long 
    说明 
    画一个焦点矩形。这个矩形是在标志焦点的样式中通过异或运算完成的(焦点通常用一个点线表示)。如用同样的参数再次调用这个函数,就表示删除焦点矩形 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hdc Long,设备场景的句柄 
    lpRect RECT,要在逻辑坐标中描绘的矩形 
      

  5.   

    //但是接收Tab,Shift+Tab这些消息呢?在控件中是如何做到?最好能举个简单的例子代码一行代码都不用~你用"用户控件"来写就行了!
    要真的就在窗体上搞这些可麻烦得很....