holdredraw.h

来自「管理项目进度工具的原代码」· C头文件 代码 · 共 92 行

H
92
字号
// SetRedraw.h: interface and implementation of the CSetRedraw class.
//
/////////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_HOLDREDRAW_H__7E73ADE2_3848_4ED1_9E8B_8881813B4262__INCLUDED_)
#define AFX_HOLDREDRAW_H__7E73ADE2_3848_4ED1_9E8B_8881813B4262__INCLUDED_


class CNcRedraw // note: there is no inheritance intentionally.
{
public:
	CNcRedraw(CWnd* pWnd, LPCTSTR szTrace = NULL) : m_hWnd(NULL), m_sTrace(szTrace)
	{
		if (pWnd)
			m_hWnd = pWnd->GetSafeHwnd();
	}

	CNcRedraw(HWND hWnd, LPCTSTR szTrace = NULL) : m_hWnd(NULL), m_sTrace(szTrace)
	{
		m_hWnd = hWnd; 
	}

	virtual ~CNcRedraw()
	{
		if (m_hWnd && ::IsWindowVisible(m_hWnd))
		{
			//TRACE("~CNcRedraw(%s)\n", m_sTrace);
			::SendMessage(m_hWnd, WM_NCPAINT, 0, 0);
		}
	}

protected:
	HWND m_hWnd;
	CString m_sTrace;
};

class CRedrawAll
{
public:
	CRedrawAll(CWnd* pWnd, BOOL bUpdateWindow = FALSE) : m_hWnd(NULL), m_bUpdateWindow(bUpdateWindow)
	{
		if (pWnd)
			m_hWnd = pWnd->GetSafeHwnd();
	}

	CRedrawAll(HWND hWnd, BOOL bUpdateWindow = FALSE) : m_hWnd(NULL), m_bUpdateWindow(bUpdateWindow)
	{
		m_hWnd = hWnd; 
	}

	virtual ~CRedrawAll()
	{
		if (m_hWnd && ::IsWindowVisible(m_hWnd))
		{
			//TRACE("~CRedrawAll()\n");
			::SendMessage(m_hWnd, WM_NCPAINT, 0, 0);
			::InvalidateRect(m_hWnd, NULL, FALSE);

			if (m_bUpdateWindow)
				::UpdateWindow(m_hWnd);
		}
	}

protected:
	HWND m_hWnd;
	BOOL m_bUpdateWindow;
};

class CHoldRedraw : protected CRedrawAll
{
public:
	CHoldRedraw(CWnd* pWnd, BOOL bUpdateWindow = FALSE) : CRedrawAll(pWnd, bUpdateWindow)
	{
		if (m_hWnd)
			::SendMessage(m_hWnd, WM_SETREDRAW, FALSE, 0);
	}

	CHoldRedraw(HWND hWnd, BOOL bUpdateWindow = FALSE) : CRedrawAll(hWnd, bUpdateWindow)
	{
		if (m_hWnd)
			::SendMessage(m_hWnd, WM_SETREDRAW, FALSE, 0);
	}

	virtual ~CHoldRedraw()
	{
		if (m_hWnd)
			::SendMessage(m_hWnd, WM_SETREDRAW, TRUE, 0);
	}
};

#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?