首先把mfcbutton的顏色重繪為漸變,點擊按鈕獲得焦點時按鈕會閃爍,有一瞬間變為白色,然后又變回原來的漸變顏色,請問這個是怎么解決?
#pragma once
#include "afxbutton.h"
class CMainButton :
public CMFCButton
{
public:
CMainButton();
~CMainButton();
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
afx_msg void OnPaint();
afx_msg void OnSetFocus(CWnd* pOldWnd);
DECLARE_MESSAGE_MAP()
};
#include "stdafx.h"
#include "MainButton.h"
BEGIN_MESSAGE_MAP(CMainButton, CMFCButton)
ON_WM_SETFOCUS()
END_MESSAGE_MAP()
CMainButton::CMainButton()
{
}
CMainButton::~CMainButton()
{
}
void CMainButton::OnPaint()
{
CMFCButton::OnPaint();
}
void CMainButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CMFCButton::DrawItem(lpDrawItemStruct);
CRect rect;
GetClientRect(rect);
CClientDC dc(this);
for (int i = 0; i < rect.Width(); i++)
{
int r, g, b;
r = 144 - i * 57 / rect.Width();
g = 175 - i * 49 / rect.Width();
b = 247 + i * 6 / rect.Width();
dc.FillSolidRect(i, 0, 1, rect.Height(), RGB(r, g, b));
}
}
void CMainButton::OnSetFocus(CWnd* pOldWnd)
{
CMFCButton::OnSetFocus(pOldWnd);
CRect rect;
GetClientRect(rect);
CClientDC dc(this);
dc.FillSolidRect(rect, RGB(255, 255, 255));
}
uj5u.com熱心網友回復:
OnEraseBkgnd(CDC* pDC) return TRUE;uj5u.com熱心網友回復:
注冊視窗類時不要這一項就不會畫視窗wndcls.hbrBackground = (HBRUSH)backGrush.m_hObject;
要重寫CMFCButton的創建函式。
另外有一個建議,用GDI++可以直接用漸變刷子,不用一點點描。
uj5u.com熱心網友回復:
雙緩沖繪制
uj5u.com熱心網友回復:
GDI+ 漸變顏色 LinearGradientBrushLinearGradientBrush是用來漸變效果的,使用的初始化引數是矩形區域,開始顏色,結束顏色,顏色變化方向,它能夠形成比較統一的漸變效果,對比PathGradientBrush的漸變,它的特點是它與周圍的顏色漸變頻率是一樣的,設定LinearGradientBrush的區域大小時,可以想象一個大的有漸變色的長方形,壓在多邊形上面,并根據多邊形的邊界裁剪。
uj5u.com熱心網友回復:
GDI+漸變顏色確實比我一點點描好多了,多謝,但是我在DrawItem打完斷點后,只要滑鼠點擊或滑倒按鈕上就會觸發DrawItem,不知道這個問題是什么造成的?uj5u.com熱心網友回復:
"只要滑鼠點擊或滑倒按鈕上就會觸發DrawItem"檢查:
void CMainButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
afxDump << "OnMouseMove\n";
//
CButton::OnMouseMove(nFlags, point);
}
uj5u.com熱心網友回復:
我要做的效果是點擊時,按鈕獲得焦點顯示高亮,但是現在總會點擊后閃爍了一下變成獲得焦點時設定的顏色,之后馬上又變回漸變顏色,也就是DrawItem運行了多次,覆寫掉了按鈕獲得焦點時設定的顏色uj5u.com熱心網友回復:
OnSetfocus() 怎么寫的 ?uj5u.com熱心網友回復:
點擊后 呼叫 OnSetfocus() ?, 那么 點擊 本身的 回應呢 ?uj5u.com熱心網友回復:
點擊 是 mousedown 和 mouseup 的 組合mousedown 會 setfocus 你畫了 焦點
mouseup 你又 改變了 焦點 圖。
這2個圖 應該 是 兼容的
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/31939.html
標籤:界面
