最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

介紹

什么叫做復(fù)選框?

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

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

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

功能實(shí)現(xiàn)

復(fù)選框父類:CButton

當(dāng)我們從資源視圖中拖出來(lái)一個(gè)控件并綁定成員變量后,當(dāng)前復(fù)選框的父類便是CButton。

這里,假設(shè)自繪的復(fù)選框類名稱叫做:UICustomCheck

繼承后的類框架是:

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

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

針對(duì)于復(fù)選框控件來(lái)說(shuō),是需要在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是一個(gè)bool值變量,0:未選中狀態(tài);1:選中狀態(tài)

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

void	SetCheck(int nCheck);

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

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

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

這里,我是重寫的OnLButtonUp消息,鼠標(biāo)抬起后更新顯示狀態(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);
}

代碼講解:

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

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

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

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)流星雨效果流程

    C語(yǔ)言實(shí)現(xiàn)流星雨效果流程

    C本篇文章帶你用C語(yǔ)言去實(shí)現(xiàn)漫天流星雨的效果,代碼寫的很清晰,效果非常棒,另有視頻詳解整個(gè)過(guò)程,相信你一定能看懂,感興趣的童鞋快來(lái)看看吧
    2021-11-11
  • Opencv光流運(yùn)動(dòng)物體追蹤詳解

    Opencv光流運(yùn)動(dòng)物體追蹤詳解

    這篇文章主要為大家詳細(xì)介紹了Opencv光流運(yùn)動(dòng)物體追蹤的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • OpenCV實(shí)現(xiàn)高斯噪聲

    OpenCV實(shí)現(xiàn)高斯噪聲

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)高斯噪聲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++遍歷map的實(shí)現(xiàn)示例

    C++遍歷map的實(shí)現(xiàn)示例

    std::map是一種關(guān)聯(lián)容器,它存儲(chǔ)的是鍵值對(duì),并且按鍵的順序進(jìn)行排序,本文主要介紹了C++遍歷map的實(shí)現(xiàn)示例,感興趣的可以了解一下,感興趣的可以了解一下
    2025-04-04
  • C++ 中

    C++ 中"emplace_back" 與 "push_back" 的區(qū)別

    這篇文章主要介紹了C++ 中"emplace_back" 與 "push_back" 的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 老程序員教你一天時(shí)間完成C++俄羅斯方塊游戲

    老程序員教你一天時(shí)間完成C++俄羅斯方塊游戲

    俄羅斯方塊游戲大家應(yīng)該非常熟悉,非常經(jīng)典的一款游戲,本文來(lái)詳細(xì)講解下俄羅斯方塊游戲的制作過(guò)程,趕緊來(lái)看下吧!希望能給你帶來(lái)幫助
    2021-08-08
  • C++多重繼承與虛繼承分析

    C++多重繼承與虛繼承分析

    這篇文章主要介紹了C++多重繼承與虛繼承分析,是面向?qū)ο蟪绦蛟O(shè)計(jì)非常重要的知識(shí)點(diǎn),需要的朋友可以參考下
    2014-08-08
  • C語(yǔ)言實(shí)現(xiàn)導(dǎo)航功能

    C語(yǔ)言實(shí)現(xiàn)導(dǎo)航功能

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)導(dǎo)航功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 一篇文章帶你了解C++智能指針詳解

    一篇文章帶你了解C++智能指針詳解

    這篇文章主要介紹了c++ 智能指針基礎(chǔ)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下,希望能給你帶來(lái)幫助
    2021-08-08
  • C++中allocator類使用示例

    C++中allocator類使用示例

    大家好,本篇文章主要講的是C++中allocator類使用示例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02

最新評(píng)論

岑巩县| 温泉县| 汉中市| 元阳县| 赞皇县| 郑州市| 镇远县| 黄山市| 专栏| 海口市| 宜良县| 禹城市| 威远县| 宿松县| 临桂县| 尚义县| 偃师市| 锡林郭勒盟| 盐池县| 玛曲县| 忻州市| 扎赉特旗| 沭阳县| 鄂州市| 江西省| 和顺县| 盐城市| 扶绥县| 高要市| 漠河县| 喀喇| 临沂市| 十堰市| 监利县| 白山市| 定结县| 鸡泽县| 军事| 彰化市| 嘉义市| 朝阳区|