我想让owner draw的按钮能和标准的按钮一样的快速相应鼠标单击

解决方案 »

  1.   

    重载 CButton::PreCreateWindow , 然后注册一个新类:BOOL CExtButton::PreCreateWindow(CREATESTRUCT& cs)
    {
        WNDCLASS wndcls;
        VERIFY(GetClassInfo(NULL, _T("BUTTON"), &wndcls));    wndcls.lpszClassName = _T("ExtButton");
        wndcls.style &= ~CS_DBLCLKS;
        VERIFY(AfxRegisterClass(&wndcls));    cs.lpszClass = wndcls.lpszClassName;    return PreCreateWindow(CREATESTRUCT& cs);
    }
      

  2.   

    楼上,我一开始也是这么作的,但是出现的效果好像还是不对!!
    BOOL CMYBUTTON::PreCreateWindow(CREATESTRUCT& cs) 
    {
        WNDCLASS wndcls;
        VERIFY(GetClassInfo(NULL, _T("BUTTON"), &wndcls));    wndcls.lpszClassName = _T("XPButton");
        wndcls.style &= ~CS_DBLCLKS;
        VERIFY(AfxRegisterClass(&wndcls));    cs.lpszClass = wndcls.lpszClassName;    return PreCreateWindow(cs);
    }在连续单击按钮时mouseup、mousedown还是不能及时响应
      

  3.   

    try this way,if it will help you out in your case:// part of my app's InitInstance() function
     WNDCLASS tempwndclass;
     GetClassInfo(NULL, "BUTTON", &tempwndclass);  // get default for button,
    since that's what i'm overriding
     tempwndclass.style &= ~CS_DBLCLKS;  // remove double-click flag
     tempwndclass.lpszClassName = "MYBUTTON";  // give my class unique name
     RegisterClass(&tempwndclass);  // register my new button class// my button's PreCreateWindow() function
    BOOL CCustomButton::PreCreateWindow(CREATESTRUCT& cs)
    {
     cs.lpszClass = "MYBUTTON";  // use the recently registered class return CButton::PreCreateWindow(cs);
    }
      

  4.   

    回复人: JennyVenus() ( ) 信誉:141  2003-03-28 01:26:00  得分:0 
     
     
      我看了别人的几个这方面代码,虽不完全一样,但是都一样的迟钝,倒是用dc的很快
      
     
    这是怎么讲???
      

  5.   

    本来就是把按钮设置成OWNER_DRAW的,要么怎么重画的呢
      

  6.   

    ::postmessage(this, WM_CLICK, 0, 0);
    不可以吗?
      

  7.   

    ::postmessage(this, WM_CLICK, 0, 0);
    不可以吗?不是这么回事,当把一个button设置成owner draw后,自己再重画这个按钮的各种状态做成一个新样貌的按钮后发现在连续点击时总不能及时响应鼠标的按下,所以要把该窗口类的CS_DBLCLKS去掉,但是在MFC里要怎么做呢?在我这里按照两位星侠的代码好像并没有起到什么效果。急呀~~~~~~~~~~~~~~~~~~~~~~~
      

  8.   

    回复人: JennyVenus() ( ) 信誉:141  2003-03-29 23:37:00  得分:0   用dc就是几个图片互相切换,不是用按钮
      
     
    不会吧,这么狠。
    其实,我一直在想:在VB里设置Command1.Style = 1然后subclass,自己在窗口函数里来绘制commandbutton的效果,这样的结果一来,每次响应鼠标的速度和标准的按钮响应速度是一样的,而在MFC里怎么就不行呢???所以,一定要在MFC里也实现这个!!!而且,我还是从CButton继承来的呢,怎还是不好用呢???
    烦!!!!!!!!!!
      

  9.   

    我觉得不什么重在PreTranslateMessage(MSG* pMsg)呢?
    BOOL PreTranslateMessage(MSG *pMsg)
    {
       if(pMsg->message==WM_LBUTTONDBLCLK)
          return TRUE;
    }
      

  10.   

    我觉得不什么重在PreTranslateMessage(MSG* pMsg)呢?
    BOOL PreTranslateMessage(MSG *pMsg)
    {
       if(pMsg->message==WM_LBUTTONDBLCLK)
          return TRUE;
    }
      

  11.   

    vb的按钮是ThunderRT6CommandButton,谁知道Mr bill在里面花了多少$呢?
      

  12.   

    呵呵,难道为了实现这个我要自己createwindow再来建立个ThunderRT6CommandButton???