VC中一些控件的小技巧

1.让List Control有Check Box
用SetExtendedStyle方法可以设置,看代码:
(CListCtrl m_ListCtrl;)

DWORDdwStyle = m_ListCtrl.GetStyle();
dwStyle
|= LVS_EX_CHECKBOXES;
m_ListCtrl.SetExtendedStyle(dwStyle);

2.让List Box有Check Box
首先,声明Control变量的时候用CCheckListBox代替CListBox。
然后,将List Box的Has Strings属性改为True;把Ower Draw属性改为Fixed。

3.Spin Control与Edit Control的绑定
首先,要让Spin Control的Tap Order紧跟着Edit Control(就是说,Spin Control的Tap Order是Edit Control的Tap Order加1)。
然后,设置Spin Control的Auto Buddy和Set Buddy Integer属性为True。

4.可以设置背景和文字颜色的Static控件
从CStatic类继承一个自己的Static类,相应WM_CTLCOLOR消息。下面是代码:
.h文件:

class ClxStatic: public CStatic
{
DECLARE_DYNAMIC(ClxStatic)
public :
ClxStatic();
virtual ~ ClxStatic();

afx_msgHBRUSHCtlColor(CDC
* /* pDC */ ,UINT /* nCtlColor */ );

void SetBackColor(COLORREFclrBack);
void SetTextColor(COLORREFclrText);

protected :
DECLARE_MESSAGE_MAP()

CBrushm_brushBack;
COLORREFm_clrBack;
COLORREFm_clrText;
};

.cpp文件:

IMPLEMENT_DYNAMIC(ClxStatic,CStatic)
ClxStatic::ClxStatic()
{
m_clrBack
= ::GetSysColor(COLOR_BTNFACE);
m_clrText
= ::GetSysColor(COLOR_BTNTEXT);
}

ClxStatic::
~ ClxStatic()
{
}

void ClxStatic::SetBackColor(COLORREFclrBack)
{
m_clrBack
= clrBack;
}

void ClxStatic::SetTextColor(COLORREFclrText)
{
m_clrText
= clrText;
}

BEGIN_MESSAGE_MAP(ClxStatic,CStatic)
ON_WM_CTLCOLOR_REFLECT()
END_MESSAGE_MAP()

HBRUSHClxStatic::CtlColor(CDC
* pDC,UINT /* nCtlColor */ )
{
// TODO:ChangeanyattributesoftheDChere
m_brushBack.Detach();
m_brushBack.CreateSolidBrush(m_clrBack);

pDC
-> SetBkColor(m_clrBack);
pDC
-> SetTextColor(m_clrText);

// TODO:Returnanon-NULLbrushiftheparent'shandlershouldnotbecalled
// returnNULL;
return (HBRUSH)m_brushBack.GetSafeHandle();
}

5.在Static控件中显示BMP
首先,给Static控件添加一个Control变量(ID要改了以后才能添加变量,也就是说ID不能为IDC_STATIC),本例为m_staticTest。
然后,用ModifyStyle函数修改Static控件的Style,让它可以显示图片:

m_staticTest.ModifyStyle( 0 ,SS_BITMAP | SS_CENTERIMAGE);

最后,就是Load文件显示出来:

CRectrect;
m_staticTest.GetWindowRect(
& rect);

// 下面的方法是按照Static控件的大小显示bmp,如果要安装图片实际大小显示,用这个方法Load图片:
// HBITMAPhBmp=(HBITMAP)::LoadImage(0,_T("D:/test.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
HBITMAPhBmp = (HBITMAP)::LoadImage( 0 ,_T( " D:/test.bmp " ),IMAGE_BITMAP,rect.Width(),rect.Height(),LR_LOADFROMFILE);

m_staticTest.SetBitmap(hBmp);
DeleteObject(hBmp);

你可能感兴趣的:(小技巧)