我需要实现这样的一个效果,通过自绘CComboBox,在组合框的下拉箭头右边再自绘一个图案,这个图案和下拉箭头占据的大小相同,下拉箭头的作用不变,自绘图案和下拉箭头两者互不干扰,自绘图案类似于CheckBox的作用,点一下是一个图片,再点一次是另一个图片,两个图片切换。高分求教
解决方案 »
- 便用CArray 模板编译出错,错误信息:cannot convert parameter 1 from 'class CArray<class Record,class Record &>' to ...
- MFC布局问题
- 为什么在数据库中取数会出现这样的调试错误??
- 用vc生成的单文档程序要实现统计字数功能怎么做啊?
- 如何静态调方式调用dll,并使用dll中的函数,函数如何声明?
- 还是关于对话框里动态绘制的直线的问题,希望大家能帮帮忙啊!谢谢大家了!进来的都有分!
- 我怎么在一个单文档的框架上让程序自动关闭所以此程序弹出的对话框??包括多层钳套
- Tab键问题
- 关于条形码打印。。。。。。 求教!!!
- 计算机本科生是否有必要考“高级程序员”?
- 使用VMProtected加壳就报毒,如何解决!
- 在回调函数里动态修改list的值提示"试图执行系统不支持操作"
实现起来不难
参考例子下载: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"));
}
是这个意思么?
还剩下的问题很好办了,你应该可以搞掂。
没有功劳也有苦劳。
可以跟我诚心念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);
}
但极力不推荐你这样做,太浪费了,在右边的上面自绘两个“按钮”吧,鼠标按下时判断按在那个 rect上就可以了