我需要实现这样的一个效果,通过自绘CComboBox,在组合框的下拉箭头右边再自绘一个图案,这个图案和下拉箭头占据的大小相同,下拉箭头的作用不变,自绘图案和下拉箭头两者互不干扰,自绘图案类似于CheckBox的作用,点一下是一个图片,再点一次是另一个图片,两个图片切换。高分求教

解决方案 »

  1.   

    在CComboBox右边画一个Button设置好想要的风格,在Button事件里改变Button的图标。
    实现起来不难
      

  2.   

    你可以添加多一个CWnd派生类作为CCombobox的父窗口,然后在这个CWnd派生类上画你要的图标
    参考例子下载:http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC%5EM%5EM/Ccom.zip#include "MyWnd.h"
    #include "MyCombo.h"
    CMyCombo m_ComboBox;void CDemoDlg::OnButton1() 
    {
    CMyWnd* mywnd=new CMyWnd();
    mywnd->CreateEx(NULL,
    AfxRegisterWndClass(NULL,LoadCursor(NULL,IDC_ARROW),(HBRUSH)GetStockObject(WHITE_BRUSH),LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME))),
    "mywnd",
    WS_BORDER|WS_VISIBLE|WS_CHILD,
    0,0,160,26,m_hWnd,NULL,NULL); //Create the ComboBox
    RECT ComboboxRect={0,0,128,100};
    m_ComboBox.Create(CBS_DROPDOWN |WS_VISIBLE| WS_VSCROLL|WS_TABSTOP ,ComboboxRect,mywnd,NULL);
    m_ComboBox.AddString(_T("jacky"));
    m_ComboBox.AddString(_T("jacky"));
    m_ComboBox.AddString(_T("jacky"));
    }
      

  3.   

    不是高人,但是有高超的控件,其实我一直想给codeproject捐点钱http://www.codeproject.com/KB/vb/IconComboBox.aspx
      

  4.   

    谢谢楼上各位的热心。你们贴的例子都不是我想要的,我不是在控件的子项上画个图标而已,这个例子到处都是了。 我是需要CComboBox和一个Button联合在一起,不知道我表达的能不能被看懂
      

  5.   

    combox旁边放个复选框不就得了
    是这个意思么?
      

  6.   

    花了1个多小时终于帮你搞掂了。
    还剩下的问题很好办了,你应该可以搞掂。
    没有功劳也有苦劳。
    可以跟我诚心念10遍
    南(音:拿na)无(音:摩mo)阿弥陀佛
    好吗!
    愿工作顺利!阿弥陀佛!例子:http://cid-3ba16e78a53d2d3d.office.live.com/self.aspx/VC%5EM%5EM/combo.zip最主要的思路:
    子类化edit再收到 WM_WINDOWPOSCHANGED 消息时重新调整edit的窗口大小(不要在WM_SIZE里处理)LRESULT CMyEdit::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    if (message==WM_WINDOWPOSCHANGED)
    {
    int cx=((LPWINDOWPOS)lParam)->cx;
    int cy=((LPWINDOWPOS)lParam)->cy; //父窗口(ComboBox)改变尺寸时,如果需要会调用SetWindowPos(or MoveWindow)去
    //改变子窗口的尺寸,此时子窗口会收到一个WM_WINDOWPOSCHANGED的消息
    //其次,下面我们调用SetWindowPos会产生一个新的WM_WINDOWPOSCHANGED重新进入到这里。
    //判断后就不再执行SetWindowPos了
    static int NewWidth=0;
    if (NewWidth!=cx) 
    {
    NewWidth=cx-40;  //edit 的新宽度
    ::SetWindowPos(m_hWnd,NULL,0,0,NewWidth,cy,SWP_NOMOVE);
    }
    }
    return CEdit::DefWindowProc(message, wParam, lParam);
    }
      

  7.   

    补充一下,你也可以在CCombobox上再放两个button,一个为下拉的,一个为你自己要的button
    但极力不推荐你这样做,太浪费了,在右边的上面自绘两个“按钮”吧,鼠标按下时判断按在那个 rect上就可以了