亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? resizabledialog.cpp

?? 一個不錯的自制解壓縮程序
?? CPP
字號:
// ResizableDialog.cpp : implementation file
//
/////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2000 by Paolo Messina
// (ppescher@yahoo.com)
//
// Free for non-commercial use.
// You may change the code to your needs,
// provided that credits to the original 
// author is given in the modified files.
//  
// modified by Tadeusz Dracz 
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ResizableDialog.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CResizableDialog

CResizableDialog::CResizableDialog()
{
	m_bInitDone = FALSE;

	m_bUseMinTrack = TRUE;
	m_bUseMaxTrack = FALSE;
	m_bUseMaxRect = FALSE;

	m_bShowGrip = true;
	
	m_bAutoRegistry = false;

	m_szGripSize = CSize(GetSystemMetrics(SM_CXVSCROLL),
		GetSystemMetrics(SM_CYHSCROLL));
}

CResizableDialog::CResizableDialog(UINT nIDTemplate, CWnd* pParentWnd)
	: CDialog(nIDTemplate, pParentWnd)
{
	m_bInitDone = FALSE;

	m_bUseMinTrack = TRUE;
	m_bUseMaxTrack = FALSE;
	m_bUseMaxRect = FALSE;

	m_bShowGrip = true;

	m_bAutoRegistry = false;

	m_szGripSize = CSize(GetSystemMetrics(SM_CXVSCROLL),
		GetSystemMetrics(SM_CYHSCROLL));
}

CResizableDialog::~CResizableDialog()
{
	ClearList();
}


BEGIN_MESSAGE_MAP(CResizableDialog, CDialog)
	//{{AFX_MSG_MAP(CResizableDialog)
	ON_WM_PAINT()
	ON_WM_NCHITTEST()
	ON_WM_GETMINMAXINFO()
	ON_WM_SIZE()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CResizableDialog message handlers


BOOL CResizableDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	UpdateGripPos();

	// gets the template size as the min track size
	CRect rc;
	GetWindowRect(&rc);
	m_ptMinTrackSize.x = rc.Width();
	m_ptMinTrackSize.y = rc.Height();

	if (m_bAutoRegistry)
		LoadWindowRect();
	m_bInitDone = TRUE;

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CResizableDialog::OnDestroy() 
{
	CDialog::OnDestroy();
	
	if (m_bAutoRegistry)
		SaveWindowRect();
	// Important: Reset the internal values in case of reuse of the dialog
	// without deleting.
	ClearList();
}

void CResizableDialog::AddAnchor(HWND wnd, CSize tl_type, CSize br_type)
{
	ASSERT(wnd != NULL && ::IsWindow(wnd));
	ASSERT(::IsChild(*this, wnd));
	ASSERT(tl_type != NOANCHOR);

	// get control's window class
	
	CString st;
	GetClassName(wnd, st.GetBufferSetLength(MAX_PATH), MAX_PATH);
	st.ReleaseBuffer();
	st.MakeUpper();

	// add the style 'clipsiblings' to a GroupBox
	// to avoid unnecessary repainting of controls inside
	if (st == "BUTTON")
	{
		DWORD style = GetWindowLong(wnd, GWL_STYLE);
		if (style & BS_GROUPBOX)
			SetWindowLong(wnd, GWL_STYLE, style | WS_CLIPSIBLINGS);
	}

	// wnd classes that don't redraw client area correctly
	// when the hor scroll pos changes due to a resizing
	BOOL hscroll = FALSE;
	if (st == "LISTBOX")
		hscroll = TRUE;

	// wnd classes that need refresh when resized
	BOOL refresh = FALSE;
	if (st == "STATIC")
	{
		DWORD style = GetWindowLong(wnd, GWL_STYLE);

		switch (style & SS_TYPEMASK)
		{
		case SS_LEFT:
		case SS_CENTER:
		case SS_RIGHT:
			// word-wrapped text needs refresh
			refresh = TRUE;
		}

		// centered images or text need refresh
		if (style & SS_CENTERIMAGE)
			refresh = TRUE;

		// simple text never needs refresh
		if (style & SS_TYPEMASK == SS_SIMPLE)
			refresh = FALSE;
	}

	// get dialog's and control's rect
	CRect wndrc, objrc;

	GetClientRect(&wndrc);
	::GetWindowRect(wnd, &objrc);
	ScreenToClient(&objrc);
	
	CSize tl_margin, br_margin;

	if (br_type == NOANCHOR)
		br_type = tl_type;
	
	// calculate margin for the top-left corner

	tl_margin.cx = objrc.left - wndrc.Width() * tl_type.cx / 100;
	tl_margin.cy = objrc.top - wndrc.Height() * tl_type.cy / 100;
	
	// calculate margin for the bottom-right corner

	br_margin.cx = objrc.right - wndrc.Width() * br_type.cx / 100;
	br_margin.cy = objrc.bottom - wndrc.Height() * br_type.cy / 100;

	// add to the list
	m_plLayoutList.AddTail(new Layout(wnd, tl_type, tl_margin,
		br_type, br_margin, hscroll, refresh));
}

void CResizableDialog::ArrangeLayout()
{
	// init some vars
	CRect wndrc;
	GetClientRect(&wndrc);

	Layout *pl;
	POSITION pos = m_plLayoutList.GetHeadPosition();

	HDWP hdwp = BeginDeferWindowPos(m_plLayoutList.GetCount());

	while (pos != NULL)
	{
		pl = (Layout*)m_plLayoutList.GetNext(pos);
	
		CRect objrc, newrc;
		CWnd* wnd = CWnd::FromHandle(pl->hwnd); // temporary solution

		wnd->GetWindowRect(&objrc);
		ScreenToClient(&objrc);
		
		// calculate new top-left corner

		newrc.left = pl->tl_margin.cx + wndrc.Width() * pl->tl_type.cx / 100;
		newrc.top = pl->tl_margin.cy + wndrc.Height() * pl->tl_type.cy / 100;
		
		// calculate new bottom-right corner

		newrc.right = pl->br_margin.cx + wndrc.Width() * pl->br_type.cx / 100;
		newrc.bottom = pl->br_margin.cy + wndrc.Height() * pl->br_type.cy / 100;

		if (!newrc.EqualRect(&objrc))
		{
			BOOL add = TRUE;

			if (pl->adj_hscroll)
			{
				// needs repainting, due to horiz scrolling
				int diff = newrc.Width() - objrc.Width();
				int max = wnd->GetScrollLimit(SB_HORZ);
			
				if (max > 0 && wnd->GetScrollPos(SB_HORZ) > max - diff)
				{
					wnd->MoveWindow(&newrc);
					wnd->Invalidate();
					wnd->UpdateWindow();
					
					add = FALSE;
				}
			}

			if (pl->need_refresh)
			{
				wnd->MoveWindow(&newrc);
				wnd->Invalidate();
				wnd->UpdateWindow();
				
				add = FALSE;
			}

			if (add)
				DeferWindowPos(hdwp, pl->hwnd, NULL, newrc.left, newrc.top,
					newrc.Width(), newrc.Height(), SWP_NOZORDER | SWP_NOACTIVATE);
		}
	}

	// update size-grip
	InvalidateRect(&m_rcGripRect);
	UpdateGripPos();
	InvalidateRect(&m_rcGripRect);

	// go re-arrange child windows
	EndDeferWindowPos(hdwp);
}

void CResizableDialog::OnSize(UINT nType, int cx, int cy) 
{
	CWnd::OnSize(nType, cx, cy);
	
	if (nType == SIZE_MAXHIDE || nType == SIZE_MAXSHOW)
		return;		// arrangement not needed

	ArrangeLayout();
}

void CResizableDialog::OnPaint() 
{
	CPaintDC dc(this);

	if (m_bShowGrip && !IsZoomed())
	{
		// draw size-grip
		dc.DrawFrameControl(&m_rcGripRect, DFC_SCROLL, DFCS_SCROLLSIZEGRIP);
	}
}

UINT CResizableDialog::OnNcHitTest(CPoint point) 
{
	CPoint pt = point;
	ScreenToClient(&pt);

	if (m_bShowGrip && m_rcGripRect.PtInRect(pt))
		return HTBOTTOMRIGHT;
	
	return CDialog::OnNcHitTest(point);
}

void CResizableDialog::UpdateGripPos()
{
	// size-grip goes bottom right in the client area

	GetClientRect(&m_rcGripRect);

	m_rcGripRect.left = m_rcGripRect.right - m_szGripSize.cx;
	m_rcGripRect.top = m_rcGripRect.bottom - m_szGripSize.cy;
}

void CResizableDialog::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{
	if (!m_bInitDone)
		return;

	if (m_bUseMinTrack)
		lpMMI->ptMinTrackSize = m_ptMinTrackSize;

	if (m_bUseMaxTrack)
		lpMMI->ptMaxTrackSize = m_ptMaxTrackSize;

	if (m_bUseMaxRect)
	{
		lpMMI->ptMaxPosition = m_ptMaxPos;
		lpMMI->ptMaxSize = m_ptMaxSize;
	}
}

void CResizableDialog::SetMaximizedRect(const CRect& rc)
{
	m_bUseMaxRect = TRUE;
	m_ptMaxPos = rc.TopLeft();
	
	CSize sz = rc.Size();
	m_ptMaxSize.x = sz.cx;
	m_ptMaxSize.y = sz.cy;
}

void CResizableDialog::ResetMaximizedRect()
{
	m_bUseMaxRect = FALSE;
}

void CResizableDialog::ShowSizeGrip(bool bShow)
{
	if (m_bShowGrip != bShow)
	{
		m_bShowGrip = bShow;
		InvalidateRect(&m_rcGripRect);
	}
}

void CResizableDialog::SetMinTrackSize(const CSize& size)
{
	m_bUseMinTrack = TRUE;

	m_ptMinTrackSize.x = size.cx;
	m_ptMinTrackSize.y = size.cy;
}

void CResizableDialog::ResetMinTrackSize()
{
	m_bUseMinTrack = FALSE;
}

void CResizableDialog::SetMaxTrackSize(const CSize& size)
{
	m_bUseMaxTrack = TRUE;

	m_ptMaxTrackSize.x = size.cx;
	m_ptMaxTrackSize.y = size.cy;
}

void CResizableDialog::ResetMaxTrackSize()
{
	m_bUseMaxTrack = FALSE;
}

// NOTE: this must be called after all the other settings
//       to have the dialog and its controls displayed properly
void CResizableDialog::SetRegistryInfo(LPCTSTR pszSection, LPCTSTR pszEntry)
{
	m_sSection = pszSection;
	m_sEntry = pszEntry;
}


// used to save/restore window's size and position
// either in the registry or a private .INI file
// depending on your application settings

#define PROFILE_FMT 	_T("%d,%d,%d,%d,%d,%d")

void CResizableDialog::SaveWindowRect()
{
	CString data;
	WINDOWPLACEMENT wp;

	ZeroMemory(&wp, sizeof(WINDOWPLACEMENT));
	wp.length = sizeof(WINDOWPLACEMENT);
	GetWindowPlacement(&wp);
	
	RECT& rc = wp.rcNormalPosition;	// alias

	data.Format(PROFILE_FMT, rc.left, rc.top,
		rc.right, rc.bottom, wp.showCmd, wp.flags);

	AfxGetApp()->WriteProfileString(m_sSection, m_sEntry, data);
}

void CResizableDialog::LoadWindowRect()
{
	CString data;
	WINDOWPLACEMENT wp;

	data = AfxGetApp()->GetProfileString(m_sSection, m_sEntry);
	
	if (data.IsEmpty())	// never saved before
		return;
	
	ZeroMemory(&wp, sizeof(WINDOWPLACEMENT));
	wp.length = sizeof(WINDOWPLACEMENT);

	RECT& rc = wp.rcNormalPosition;	// alias

	if (_stscanf(data, PROFILE_FMT, &rc.left, &rc.top,
		&rc.right, &rc.bottom, &wp.showCmd, &wp.flags) == 6)
	{
		SetWindowPlacement(&wp);
	}
}

void CResizableDialog::ClearList()
{
	Layout *pl;

	POSITION pos = m_plLayoutList.GetHeadPosition();

	while (pos != NULL)
	{
		pl = (Layout*)m_plLayoutList.GetNext(pos);
		delete pl;
	}
	m_plLayoutList.RemoveAll();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产区一区| 欧美三日本三级三级在线播放| 欧美三级一区二区| 日本中文字幕一区二区有限公司| 亚洲第一在线综合网站| 一区二区三区四区高清精品免费观看| 成人精品鲁一区一区二区| 欧美国产精品中文字幕| 国产乱码精品1区2区3区| 国产日韩欧美精品一区| 99riav久久精品riav| 亚洲成av人片www| 欧美一区二区三区视频在线| 国产真实精品久久二三区| 欧美激情综合网| 91久久精品国产91性色tv| 日韩极品在线观看| 久久久欧美精品sm网站 | 亚洲欧美综合在线精品| 9i看片成人免费高清| 亚洲成av人片一区二区三区| 精品久久一二三区| www.欧美色图| 日本视频在线一区| 中文乱码免费一区二区| 欧美日韩视频一区二区| 国产一区三区三区| 亚洲乱码国产乱码精品精可以看| 欧美电影一区二区| 成人综合婷婷国产精品久久免费| 亚洲一区二区三区美女| 国产亚洲一二三区| 欧美日韩一区 二区 三区 久久精品| 免费成人av在线播放| 中文字幕中文字幕一区二区| 欧美一区二区三区啪啪| 99re在线精品| 国产在线精品不卡| 一区二区三区中文字幕精品精品| 日韩一区二区免费电影| 91小视频在线| 精品一区中文字幕| 亚洲大型综合色站| 国产精品国产三级国产普通话蜜臀| 欧美手机在线视频| 不卡一区二区三区四区| 久久精品国产亚洲一区二区三区| 亚洲女同女同女同女同女同69| 日韩欧美一区二区三区在线| 日本韩国一区二区| 成人午夜电影小说| 久国产精品韩国三级视频| 亚洲综合一区在线| 国产精品久久久久久久裸模| 欧美tickling网站挠脚心| 欧美日韩免费一区二区三区| 99久久综合国产精品| 精彩视频一区二区| 日本亚洲三级在线| 亚洲国产成人av| 亚洲品质自拍视频网站| 中文字幕亚洲综合久久菠萝蜜| 久久综合av免费| 欧美一级片在线看| 欧美日韩国产中文| 91福利视频网站| 一本大道av伊人久久综合| 国产91精品精华液一区二区三区| 狠狠色狠狠色综合系列| 免费观看一级欧美片| 日韩中文字幕不卡| 五月开心婷婷久久| 亚洲午夜精品在线| 亚洲综合另类小说| 一区二区三区四区在线| 亚洲女同女同女同女同女同69| 18欧美亚洲精品| 亚洲同性同志一二三专区| 国产精品初高中害羞小美女文| 国产农村妇女毛片精品久久麻豆 | 欧美日韩国产高清一区二区| 色婷婷精品久久二区二区蜜臂av | 国产精品区一区二区三区| 国产视频亚洲色图| 日本一区二区三区在线不卡| 国产欧美日韩综合精品一区二区| 久久九九久久九九| 国产日本一区二区| 国产精品久久久久久久第一福利| 国产精品久久久久一区二区三区 | 国产日产欧美一区二区三区 | 国产午夜精品一区二区三区四区| 欧美日韩一区二区在线观看| 在线视频一区二区三区| 色国产综合视频| 欧美日韩三级在线| 日韩欧美一二三区| 精品欧美黑人一区二区三区| 欧美精品一区二区三区在线 | 国产99久久久精品| av在线不卡免费看| 在线观看91视频| 555夜色666亚洲国产免| 精品美女一区二区| 国产女人18毛片水真多成人如厕 | 国产乱子伦视频一区二区三区| 国产精品乡下勾搭老头1| 成人免费视频一区二区| 色婷婷综合在线| 欧美一区中文字幕| 国产农村妇女毛片精品久久麻豆| 亚洲男人的天堂一区二区| 午夜不卡av免费| 成人综合在线网站| 欧美日韩aaaaaa| 久久精品人人做人人爽97| 亚洲黄色小说网站| 久久精品免费看| 91网站黄www| 精品日韩欧美一区二区| 中文字幕综合网| 麻豆成人91精品二区三区| 91污在线观看| 久久综合久色欧美综合狠狠| 亚洲精品国久久99热| 韩国在线一区二区| 欧美影院精品一区| 久久精品一区二区三区不卡牛牛| 亚洲自拍偷拍网站| 国产在线精品一区在线观看麻豆| 99久久亚洲一区二区三区青草| 91精品国产91热久久久做人人| 国产精品不卡视频| 欧美a一区二区| 色呦呦一区二区三区| 精品日韩一区二区三区免费视频| 亚洲精品视频免费观看| 国产成人自拍网| 91精品久久久久久蜜臀| 亚洲视频中文字幕| 国产精品一二三在| 欧美一区二区播放| 亚洲午夜激情网站| 99久久综合国产精品| 国产午夜亚洲精品不卡| 久久精品久久精品| 欧美一区二区在线不卡| 亚洲综合网站在线观看| 99精品热视频| 国产欧美综合在线观看第十页| 日本美女一区二区三区| 欧美日韩中字一区| 亚洲精品中文字幕乱码三区| 成人一区在线看| 久久久一区二区三区捆绑**| 久久99国产精品免费| 91精品国产高清一区二区三区| 亚洲国产日韩av| 在线精品视频小说1| 亚洲激情在线播放| 色综合色狠狠天天综合色| 国产三级精品三级| 国产乱码精品一品二品| 久久久久久久av麻豆果冻| 狠狠色丁香九九婷婷综合五月| 日韩欧美的一区| 麻豆专区一区二区三区四区五区| 精品视频在线免费观看| 亚洲第一av色| 911精品产国品一二三产区| 午夜av电影一区| 日韩欧美高清在线| 久久9热精品视频| 精品国产91乱码一区二区三区| 麻豆91免费看| 26uuu亚洲综合色| 国产suv精品一区二区883| 国产免费成人在线视频| 99精品国产一区二区三区不卡| 国产精品视频一区二区三区不卡| 成人午夜激情影院| 亚洲女女做受ⅹxx高潮| 欧美日韩成人在线一区| 久久99精品国产麻豆婷婷洗澡| 精品国产电影一区二区| 国产不卡视频在线观看| 综合欧美亚洲日本| 欧美在线你懂的| 日本vs亚洲vs韩国一区三区二区| 日韩精品专区在线影院重磅| 国产精品亚洲成人| 国产精品乱人伦| 欧美亚洲精品一区| 捆绑变态av一区二区三区| 国产日韩精品一区| 精品视频资源站| 国产精品99久| 一区二区三区四区乱视频| 日韩一级精品视频在线观看| 成人综合婷婷国产精品久久免费|