我想在文本框中添加一个命令按钮,求助大家了

解决方案 »

  1.   

    创建一个CButton,然后MoveWindow等移动CEdit的位置
      

  2.   

    用1楼的方法,放是可以放上去,但是你怎么用呀?Edit会自动获得你的输入焦点,你的Button根本单击不了,除非你将Edit->EnableWindow(FALSE).
      

  3.   

    cedit旁边放一个小button  点击button处理edit事件
      

  4.   

    把Button的Tab顺序设置的比Edit低,那样就可以按Button了
      

  5.   

    呵呵。好像你说的不太明确,给不了你正确的代码。呵呵。你是想输入之后在buuton里显示输入的值吗?
      

  6.   

    可以参考CMFCEditBrowseCtrl,微软的这个类好像就是这样实现的
      

  7.   

    关注一下,我也想知道。
    之前做一个登录界面,想模仿QQ密码框那样带个软键盘按钮没有做成,不知道是否和LZ的情况类似
      

  8.   

    创建按钮的时候,以CEdit控件作为它的父窗口
      

  9.   

    按钮加在 edit 的 前部,还是 后部?
      

  10.   

    2种方式:
    1种:一个有边框的CStatic里面左边是无边框edit右边是按钮
    2种:一个有边框的CEdit加一个popup样式的按钮
      

  11.   

    第1种不错;第2种前面提到了,当CEdit获得焦点后,CButton点不到,如果作为子窗口,虽然可以点到,CEdit也会覆盖CButton的显示
      

  12.   

    注意我说的是popup样式,child样式当然会被覆盖。
      

  13.   

    建议:
    1.在WM_NCCALCSIZE等消息重新计算CEdit的非客户区/边框,留出足够的位置放按钮
    2.在WM_NCPAINT等消息里,绘制一个按钮上去(只是视觉上的,不是真的去创建控件)
    3.绘制按钮时,贴图或者使用系统自带的API DrawThemeBackground
    4.在WM_NCHITTEST、WM_NCLBUTTONDOWN等消息处理"按钮"的不同状态以及点击事件
      

  14.   

    使用系统自带API绘制按钮可参考:
    http://blog.csdn.net/cometnet/article/details/7293913
    //画出整个控件背景
    HBRUSH hbr=CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
    FillRect(hDC,&rc,hbr);
    DeleteObject(hbr);
    //画出前景
    HTHEME hTheme=OpenThemeData(m_hWnd,L"Button");
    if(hTheme){//画出XP风格的按钮
        if(m_bDisable){//禁止状态
            DrawThemeBackground (hTheme,hDC, BP_PUSHBUTTON, PBS_DISABLED,&rc,NULL);
        }else if(m_bDown){//按下状态
            DrawThemeBackground (hTheme,hDC, BP_PUSHBUTTON, PBS_PRESSED,&rc,NULL);
        }else if(m_bOver){//热点状态
            DrawThemeBackground (hTheme,hDC, BP_PUSHBUTTON, PBS_HOT,&rc,NULL);
        }else{//普通状态
            DrawThemeBackground (hTheme,hDC, BP_PUSHBUTTON, PBS_NORMAL,&rc,NULL);
        }
        CloseThemeData (hTheme);
    }else{//画出Win9x风格的控件
        if(m_bDisable){
            DrawFrameControl (hDC,rc,DFC_BUTTON, DFCS_BUTTONPUSH|DFCS_INACTIVE);
        }else if(m_bDown){
            DrawFrameControl (hDC,rc,DFC_BUTTON, DFCS_BUTTONPUSH|DFCS_PUSHED);
        }else if(m_bOver){
            DrawFrameControl (hDC,rc,DFC_BUTTON, DFCS_BUTTONPUSH|DFCS_HOT);
        }else{
            DrawFrameControl (hDC,rc,DFC_BUTTON, DFCS_BUTTONPUSH);
        }
    }
      

  15.   

    我想,大概的思路是重写个CEdit类,在CEDit创建完后,动态创建一个按钮进去,不知道CEdit创建完后是用那个消息。
      

  16.   

    参考一下bcg中的 cbcgpbutton的实现