mfc Combox扩展类

来源:互联网 发布:应用程序是软件么 编辑:程序博客网 时间:2024/05/03 00:12

这是我在网上寻找的一个combox扩展类,并加以改进,实现combox自绘,允许改变其样式,及是否可编辑属性,及设置文本内容等。

使用例子:

vector<CComboBoxTest*>   m_vecAddComboxControl;//下拉框记录列表

afx_msg void OnMyCombox(UINT nId);

void OnEditMyCombox(UINT nId);

CWnd* CreateDynControl(int nCtrlType,CString strCaption, 
  LONG nStartX, LONG nStartY,LONG nWidth, 
  LONG nHeight, int nStyle, const CString &sFontType = "textfont");

void  CreateOneTimeChoiceCard(LONG nStartX, LONG nStartY, int nManyTime, int nDance);


CKTLXStudentAnswerView::~CKTLXStudentAnswerView()
{
for (unsigned int i = 0; i < m_vecAddComboxControl.size(); i++)
{
delete m_vecAddComboxControl[i];
}
m_vecAddComboxControl.clear();

}

BEGIN_MESSAGE_MAP(CKTLXStudentAnswerView, CFormView)
ON_CONTROL_RANGE(CBN_SELCHANGE , IDC_MYCOMBOX_ANSWER , IDC_MYCOMBOX_ANSWER + 999 ,OnMyCombox)
ON_CONTROL_RANGE(CBN_EDITCHANGE , IDC_MYCOMBOX_ANSWER , IDC_MYCOMBOX_ANSWER + 999 ,OnEditMyCombox)
END_MESSAGE_MAP()

/******************************************************************
* 函数介绍:创建动态控件方法
* 输入参数:
* 输出参数:
* 返回值  :
*******************************************************************/
CWnd* CKTLXStudentAnswerView::CreateDynControl(int nCtrlType,CString strCaption,
  LONG nStartX, LONG nStartY,LONG nWidth,
  LONG nHeight, int nStyle, const CString &sFontType)
{
CWnd* lpCwnd = NULL;
CRect rct = CRect(nStartX,nStartY,nStartX+nWidth,nStartY+nHeight);
if (CTRLT_BUTTON == nCtrlType )
{
CButtonST *p_Button = new CButtonST();
ASSERT_VALID(p_Button);
if( !p_Button->Create( strCaption, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON |BS_BITMAP| nStyle, rct, this, IDC_MYBUTTON_ANSWER+m_ButtonCount ) )
{
return NULL;
}
lpCwnd = (CWnd*)p_Button;
m_vecAddButtonControl.push_back(p_Button);
m_ButtonCount++;
}
else if (CTRL_PIC_STC == nCtrlType)
{
CPictureCtrl *p_Static = new CPictureCtrl();
ASSERT_VALID(p_Static);
if( !p_Static->Create( strCaption,  WS_VISIBLE | SS_LEFT | nStyle, rct, this, IDC_MYSTATIC1_ANSWER+m_PicStaticCount ) )
{
return NULL;
}
// p_Static->SetFont(&m_myFont);


lpCwnd = (CWnd*)p_Static;
m_vecAddPicStaticControl.push_back(p_Static);
m_PicStaticCount++;
}
else if (CTRL_STATIC == nCtrlType)
{
CStatic *p_Static = new CStatic();
ASSERT_VALID(p_Static);
if( !p_Static->Create( strCaption, WS_CHILD | WS_VISIBLE | SS_LEFT | nStyle, rct, this, IDC_MYSTATIC2_ANSWER+m_StaticCount ) )
{
return NULL;
}


if (0 == sFontType.CompareNoCase("titlefont"))
{
p_Static->SetFont(&m_titlefont);
}
if (0 == sFontType.CompareNoCase("textfont"))
{
p_Static->SetFont(&m_textfont);
}


lpCwnd = (CWnd*)p_Static;
m_vecAddStaticControl.push_back(p_Static);
m_StaticCount++;
}
else  if (CTRL_EDIT == nCtrlType)
{
CEditWithButton *p_Edit = new CEditWithButton();
ASSERT_VALID(p_Edit);
if( !p_Edit->Create( WS_CHILD |WS_VISIBLE | ES_LEFT |ES_WANTRETURN | ES_MULTILINE | ES_AUTOVSCROLL |nStyle, rct, this, IDC_MYEDIT_ANSWER+m_EditCount ) )
{
return NULL;
}
p_Edit->SetWindowText(strCaption);
lpCwnd = (CWnd*)p_Edit;
m_vecAddEditControl.push_back(p_Edit);
m_EditCount++;
}
else  if (CTRL_COMBOX == nCtrlType)
{
CComboBoxTest *p_Combox = new CComboBoxTest();
   ASSERT_VALID(p_Combox);
if( !p_Combox->Create( WS_CHILD | WS_VISIBLE | nStyle, rct, this, IDC_MYCOMBOX_ANSWER+m_ComboxCount ) )
{
return NULL;
}


p_Combox->AddString(strCaption);
p_Combox->SetCurSel(0);
lpCwnd = (CWnd*)p_Combox;
m_vecAddComboxControl.push_back(p_Combox);
m_ComboxCount++;
}



return lpCwnd;
}

/******************************************************************
* 函数介绍:添加一次选择题
* 输入参数:
* 输出参数:
* 返回值  :
*******************************************************************/
void CKTLXStudentAnswerView::CreateOneTimeChoiceCard(LONG nStartX, LONG nStartY, int nManyTime, int nDance)
{
      ............
CreateDynControl(CTRL_COMBOX,  "",     nStartX + 50 + 6*nDance, nStartY+2, 60, 42,CBS_DROPDOWNLIST);    //50 + 7*nDance
/*for (int i = 1; i <= 20; i++)
{
CString sTemp;
sTemp.Format("%d", i);
m_vecAddComboxControl[m_nQusNum - 1]->AddString(sTemp);
}*/
m_vecAddComboxControl[m_ComboxCount - 1]->SetComboBitmap(IDB_BMP_COMBOX_LEFT, IDB_BMP_COMBOX_RIGHET, IDB_BMP_COMBOX_CENTER);
m_vecAddComboxControl[m_ComboxCount - 1]->SetHighlightColor(RGB(0,191,243),RGB(255,255,255),RGB(0,0,0));
m_vecAddComboxControl[m_ComboxCount - 1]->SetNormalPositionColor(RGB(255,255,255),RGB(0,0,0));

      ..........
}

扩展类下载地址:http://download.csdn.net/detail/leighton_52/6727603

0 0
原创粉丝点击