欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于MFC實現(xiàn)自定義復選框效果

 更新時間:2022年02月09日 09:37:03   作者:中國好公民st  
復選框是一種可同時選中多項的基礎控件,主要是有兩種明顯的狀態(tài):選中與非選中。本文將通過MFC框架實現(xiàn)自定義復選框效果,感興趣的可以了解一下

介紹

什么叫做復選框?

復選框是一種可同時選中多項的基礎控件,主要是有兩種明顯的狀態(tài):選中與非選中。

在我們實際開發(fā)過程中,單純的系統(tǒng)邊框已經(jīng)無法滿足對界面顯示需求了,這時需要采用自定義圖片進行展示,那么展示效果是如何呢?

對于我們MFC框架來說,想要實現(xiàn)一個自定義的控件很難,一般情況下采用自繪的方式實現(xiàn)。對于Check控件來說,也是如此。

功能實現(xiàn)

復選框父類:CButton

當我們從資源視圖中拖出來一個控件并綁定成員變量后,當前復選框的父類便是CButton。

這里,假設自繪的復選框類名稱叫做:UICustomCheck

繼承后的類框架是:

class UICustomCheck : public CButton 
{
	DECLARE_DYNAMIC(UICustomCheck)
public:
	UICustomCheck();
	virtual ~UICustomCheck();
protected:
	DECLARE_MESSAGE_MAP()
};

前幾章我也曾經(jīng)說過,MFC中控件的自繪無外乎兩種情況:OnPaint自繪以及DrawItem自繪。

針對于復選框控件來說,是需要在OnPaint自繪的。

思路:根據(jù)選中的兩種狀態(tài),分別顯示不同的圖片。

第一種情況(未選中狀態(tài)),展示未選中狀態(tài)圖片;第二種情況(選中狀態(tài)),展示選中狀態(tài)圖片

CPaintDC  dc(this);
CRect   rcClient;
this->GetClientRect(&rcClient);

//繪制按鈕的狀態(tài)顯示
if(m_bState == 0) //未按下
{
	if (!m_ImageUnCheck.IsNull())
	{
		m_ImageUnCheck.Draw(dc.GetSafeHdc() ,rcClient);
	}
}
else{ //按下
	if (!m_ImageCheck.IsNull())
	{
		m_ImageCheck.Draw(dc.GetSafeHdc() , rcClient);
	}
}

代碼講解:

m_bState是一個bool值變量,0:未選中狀態(tài);1:選中狀態(tài)

當用戶設置狀態(tài)更換時,此時需要更新m_bState值的數(shù)據(jù)。所以說,這里用到了函數(shù)重寫功能

void	SetCheck(int nCheck);

該函數(shù)是屬于CButton的內(nèi)部函數(shù),為了在用戶設置選中狀態(tài)時更新圖片,此時,就需要重寫該函數(shù)。

還有一種情況,用戶不手動設置SetCheck函數(shù)改變狀態(tài),只是點擊控件,自動更新狀態(tài),那么該如何實現(xiàn)呢?

在我們自繪過程中,每個自繪控件都會有鼠標的點擊消息,為了實現(xiàn)多次點擊更換圖片的狀態(tài),一般都會使用OnLButtonDown或者是OnLButtonUp兩個消息進行設置。

這里,我是重寫的OnLButtonUp消息,鼠標抬起后更新顯示狀態(tài)

void UICustomCheck::OnLButtonUp(UINT nFlags, CPoint point)
{
 	m_bState = !m_bState;
  	if (this->m_hWnd != nullptr)
	{
		CWnd *pParent = this->GetParent();
		CRect rc;
		this->GetWindowRect(rc);
		pParent->ScreenToClient(rc);
		pParent->InvalidateRect(rc, TRUE);
		pParent->UpdateWindow();
	}
  	this->Invalidate(FALSE);
	CButton::OnLButtonUp(nFlags , point);
}

代碼講解:

每次更換圖片時,不確定用戶使用的是否是異形圖片,所以,在更換狀態(tài)時都需要獲取父窗口中當前控件對應的區(qū)域,進行強制刷新。

到這里,復選框的圖片替換功能就講解結(jié)束了,功能簡單,主要是在OnPaint中的繪制,以及刷新問題。

以上就是基于MFC實現(xiàn)自定義復選框效果的詳細內(nèi)容,更多關(guān)于MFC自定義復選框的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入分析C++中deque的使用

    深入分析C++中deque的使用

    本篇文章介紹了,深入分析C++中deque的使用。需要的朋友參考下
    2013-05-05
  • C++實現(xiàn)學生成績管理系統(tǒng)

    C++實現(xiàn)學生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)學生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++學習筆記之pimpl用法詳解

    C++學習筆記之pimpl用法詳解

    在編寫穩(wěn)定代碼是,管理好代碼間的依賴性是不可缺少的一個環(huán)節(jié)。特別是庫文件的編寫中,減少代碼間的依賴性可以提供一個“干凈”的接口。下面這篇文章主要給大家介紹了關(guān)于C++中pimpl用法的相關(guān)資料,需要的朋友可以參考下。
    2017-08-08
  • Qt實現(xiàn)編輯數(shù)據(jù)庫數(shù)據(jù)的方法詳解

    Qt實現(xiàn)編輯數(shù)據(jù)庫數(shù)據(jù)的方法詳解

    這篇文章主要為大家詳細介紹了Qt是如何實現(xiàn)編輯數(shù)據(jù)庫數(shù)據(jù)的,文中的示例代碼簡潔易懂,對我們深入了解QT有一定的幫助,感興趣的小伙伴可以了解一下
    2023-02-02
  • C語言實現(xiàn)簡單的貪吃蛇游戲

    C語言實現(xiàn)簡單的貪吃蛇游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單的貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • c語言將字符串中的小寫字母轉(zhuǎn)換成大寫字母

    c語言將字符串中的小寫字母轉(zhuǎn)換成大寫字母

    本文主要介紹了c語言將字符串中的小寫字母轉(zhuǎn)換成大寫字母的方法實例。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • EasyC++單獨編譯

    EasyC++單獨編譯

    這篇文章主要介紹了EasyC++單獨編譯,在上一篇當中,我們編寫好了頭文件coordin.h,現(xiàn)在我們要完成它的實現(xiàn)。需要的小伙伴可以先學習上一篇內(nèi)容然后一起與小編一起進入本篇內(nèi)容一起學習吧
    2021-12-12
  • C語言刷題判斷鏈表中是否有環(huán)題解

    C語言刷題判斷鏈表中是否有環(huán)題解

    這篇文章主要為大家介紹了C語言刷題判斷鏈表中是否有環(huán)題解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 基于MFC和OpenCV實現(xiàn)角點檢測

    基于MFC和OpenCV實現(xiàn)角點檢測

    這篇文章主要為大家詳細介紹了基于MFC和OpenCV實現(xiàn)角點檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C語言使用四種方法初始化結(jié)構(gòu)體

    C語言使用四種方法初始化結(jié)構(gòu)體

    這篇文章說明了什么是結(jié)構(gòu)體,介紹了結(jié)構(gòu)體的概念和使用優(yōu)點,在C語言中如何使用和初始化結(jié)構(gòu)體方法,通過詳細的代碼展開進行說明,希望該篇文章對你有所幫助
    2021-06-06

最新評論