介紹了一下五個小技巧: 1.讓List Control有Check Box 2.讓List Box有Check Box 3.Spin Control與Edit Control的綁定 4.可以設置背景和文字顏色的Static控件 5.在Static控件中顯示BMP
1.讓List Control有Check Box
用SetExtendedStyle方法可以設置,看代碼:
(CListCtrl m_ListCtrl;)
DWord dwStyle = 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_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/);
void SetBackColor(COLORREF clrBack);
void SetTextColor(COLORREF clrText);
protected:
DECLARE_MESSAGE_MAP()
CBrush m_brushBack;
COLORREF m_clrBack;
COLORREF m_clrText;
};
.cpp文件:
IMPLEMENT_DYNAMIC(ClxStatic, CStatic)
ClxStatic::ClxStatic()
{
m_clrBack = ::GetSysColor(COLOR_BTNFACE);
m_clrText = ::GetSysColor(COLOR_BTNTEXT);
}
ClxStatic::~ClxStatic()
{
}
void ClxStatic::SetBackColor(COLORREF clrBack)
{
m_clrBack = clrBack;
}
void ClxStatic::SetTextColor(COLORREF clrText)
{
m_clrText = clrText;
}
BEGIN_MESSAGE_MAP(ClxStatic, CStatic)
ON_WM_CTLCOLOR_REFLECT()
END_MESSAGE_MAP()
HBRUSH ClxStatic::CtlColor(CDC* pDC, UINT /*nCtlColor*/)
{
// TODO: Change any attributes of the DC here
m_brushBack.Detach();
m_brushBack.CreateSolidBrush(m_clrBack);
pDC->SetBkColor(m_clrBack);
pDC->SetTextColor(m_clrText);
// TODO: Return a non-NULL brush if the parent's handler should not be called
//return NULL;
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文件顯示出來:
CRect rect;
m_staticTest.GetWindowRect(&rect);
// 下面的方法是按照Static控件的大小顯示bmp,如果要安裝圖片實際大小顯示,用這個方法Load圖片:
// HBITMAP hBmp = (HBITMAP)::LoadImage(0, _T("D:\test.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
HBITMAP hBmp = (HBITMAP)::LoadImage(0, _T("D:\test.bmp"), IMAGE_BITMAP, rect.Width(), rect.Height(), LR_LOADFROMFILE);
m_staticTest.SetBitmap(hBmp);
DeleteObject(hBmp);