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

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

?? tabbedmdi.cpp

?? These listed libraries are written in WTL. But it s really hard to mix both MFC & WTL together. Obvi
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "stdafx.h"
#include "TabbedMDI.h"
#include <afxpriv.h>

using namespace WTL4MFC;
using namespace WTL::DockSplitTab;

IMPLEMENT_DYNCREATE(CTabbedMDIFrameWnd, CDockingMDIFrameWnd)

BEGIN_MESSAGE_MAP(CTabbedMDIFrameWnd, CDockingMDIFrameWnd)
	ON_UPDATE_COMMAND_UI_RANGE(ID_WINDOW_ARRANGE, ID_WINDOW_TILE_VERT, & CTabbedMDIFrameWnd::OnUpdateMDIWindowCmd)
END_MESSAGE_MAP()

void CTabbedMDIFrameWnd::OnUpdateMDIWindowCmd(CCmdUI* pCmdUI)
{
	// We don't want handling for MDI commands
	pCmdUI->Enable(FALSE);
}

HMENU CTabbedMDIFrameWnd::GetWindowMenuPopup(HMENU hMenuBar)
{
	int iCount = ::GetMenuItemCount(hMenuBar);

	// In a standard MDI menu, "Window" & "Help" are the 2 last sub-menus
	return (iCount >= 2)? ::GetSubMenu(hMenuBar, iCount-2) : NULL;
}

BOOL CTabbedMDIFrameWnd::PreTranslateMessage(MSG* pMsg)
{
	if(WM_COMMAND == pMsg->message)
	{
		// menu or accelerator within range of MDI children
		ASSERT(AFX_IDM_FIRST_MDICHILD == 0xFF00);
		if( (pMsg->lParam == NULL) && ((LOWORD(pMsg->wParam) & 0xf000) == 0xf000) )
		{
			m_wndMDIClient.SetActiveChildByMenuId(LOWORD(pMsg->wParam));
			return TRUE;
		}
	}
	else if	(WM_KEYDOWN == pMsg->message)
	{
		if(__super::PreTranslateMessage(pMsg))
		{
			// This message is handled by __super, should return immediately
			return TRUE;
		}

		if(	(pMsg->wParam == VK_F6) &&
			(GetKeyState(VK_CONTROL) < 0) &&			// Ctrl-F6
			(m_wndMDIClient.GetChildCount() > 1) &&		// More than one MDI child
			(NULL == this->GetActiveView()) )			// Still in MDI mode
		{
			::SendMessage(m_hWndMDIClient, WM_MDINEXT, NULL, (GetKeyState(VK_SHIFT) < 0) );
			return TRUE;
		}
		else if( (pMsg->wParam == VK_F4) &&
			(GetKeyState(VK_CONTROL) < 0) &&			// Ctrl-F4
			(m_wndMDIClient.GetChildCount() > 0) &&		// At least one 
			(NULL == this->GetActiveView()) )			// Still in MDI mode
		{
			CMDIChildWnd* pWnd = MDIGetActive();
			ASSERT_KINDOF(CTabbedMDIChildWnd, pWnd);
			pWnd->SendMessage(WM_CLOSE, 0, 0);
			return TRUE;
		}

		return FALSE;
	}
	return __super::PreTranslateMessage(pMsg);
}

// virtual
BOOL CTabbedMDIFrameWnd::CreateClient(LPCREATESTRUCT lpCreateStruct, CMenu* pWindowMenu)
{
	ASSERT(NULL == m_hWndMDIClient);

	class CMDICreationHookWnd : public CWnd
	{
		CMDIClientHooker* m_pMDIClientWithSplitter;
		virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
		{
			// This is the first message
			ASSERT(WM_NCCREATE == message);

			// Un-subclassing
			HWND hWnd = this->UnsubclassWindow();
			CWindow(hWnd).ModifyStyleEx(WS_EX_CLIENTEDGE, 0, SWP_FRAMECHANGED);
			m_pMDIClientWithSplitter->SubclassWindow(hWnd);

			// Modify style and forward message to WTL library
			return ::SendMessage(hWnd, message, wParam, lParam);
		}

	public:
		CMDICreationHookWnd(CMDIClientHooker* pMDIClientWithSplitter)
			: m_pMDIClientWithSplitter(pMDIClientWithSplitter)
		{
		}
	};

	CMDICreationHookWnd wndHooker(&this->m_wndMDIClient);
	AfxHookWindowCreate(&wndHooker);
	return __super::CreateClient(lpCreateStruct, pWindowMenu);
}

//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////

IMPLEMENT_DYNCREATE(CTabbedMDIChildWnd, CMDIChildWnd)

BEGIN_MESSAGE_MAP(CTabbedMDIChildWnd, CMDIChildWnd)
	ON_WM_WINDOWPOSCHANGING()
	ON_WM_SIZE()
	ON_WM_MOUSEACTIVATE()
	ON_WM_DESTROY()
	ON_WM_MDIACTIVATE()
	ON_WM_NCCREATE()
	ON_MESSAGE(WM_SETTEXT, OnSetText)
END_MESSAGE_MAP()

CTabbedMDIChildWnd::CTabbedMDIChildWnd()
: m_blInChangeParent(FALSE)
, m_hWndMDIClient(NULL)
{
}

HWND CTabbedMDIChildWnd::ChangeParent(HWND hWndNewParent)
{
	m_blInChangeParent = TRUE;
	HWND hWndOldParent = (HWND) ::SetWindowLongPtr(m_hWnd,
		GWLP_HWNDPARENT, (LONG_PTR) hWndNewParent);
	m_blInChangeParent = FALSE;

	return hWndOldParent;
}

LRESULT CTabbedMDIChildWnd::WindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
{
	return (m_blInChangeParent)? 0 : __super::WindowProc(nMsg, wParam, lParam);
}

LRESULT CTabbedMDIChildWnd::DefWindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
{
	return ::DefWindowProc(m_hWnd, nMsg, wParam, lParam);
}

BOOL CTabbedMDIChildWnd::OnNcCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (!__super::OnNcCreate(lpCreateStruct))
		return FALSE;

	// Keep the MDI client for later use
	m_hWndMDIClient = ::GetParent(m_hWnd);
	return TRUE;
}

void CTabbedMDIChildWnd::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
	// Skip behavior of CMDIChildWnd class
	::DefWindowProc(m_hWnd, WM_WINDOWPOSCHANGING, 0, (LPARAM) lpwndpos);
}

void CTabbedMDIChildWnd::OnSize(UINT nType, int cx, int cy)
{
	// Trick: Change its parent temporarily
	HWND hWndOldParent = ChangeParent(m_hWndMDIClient);
	__super::OnSize(nType, cx, cy);
	ChangeParent(hWndOldParent);
}

void CTabbedMDIChildWnd::OnDestroy()
{
	// Skip behavior of CMDIChildWnd class
	// Otherwise, we will meet a lot of trouble :-(
	CFrameWnd::OnDestroy();
}

CWnd* CTabbedMDIChildWnd::GetMessageBar()
{
	CFrameWnd* pFrameWnd = (CFrameWnd*) CWnd::FromHandlePermanent(::GetParent((HWND)m_hWndMDIClient));
	ASSERT_KINDOF(CFrameWnd, pFrameWnd);
	return pFrameWnd->GetMessageBar();
}

void CTabbedMDIChildWnd::ActivateFrame(int nCmdShow)
{
	// Trick: Change its parent temporarily
	HWND hWndOldParent = ChangeParent(m_hWndMDIClient);
	__super::ActivateFrame(SW_NORMAL);
	ChangeParent(hWndOldParent);
}

void CTabbedMDIChildWnd::OnUpdateFrameTitle(BOOL bAddToTitle)
{
	// Trick: Change its parent temporarily
	HWND hWndOldParent = ChangeParent(m_hWndMDIClient);
	__super::OnUpdateFrameTitle(bAddToTitle);
	ChangeParent(hWndOldParent);
}

void CTabbedMDIChildWnd::OnUpdateFrameMenu(BOOL bActive, CWnd* pActivateWnd, HMENU hMenuAlt)
{
	// Trick: Change its parent temporarily
	HWND hWndOldParent = ChangeParent(m_hWndMDIClient);
	__super::OnUpdateFrameMenu(bActive, pActivateWnd, hMenuAlt);
	ChangeParent(hWndOldParent);
}

int CTabbedMDIChildWnd::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
	int nResult = CFrameWnd::OnMouseActivate(pDesktopWnd, nHitTest, message);
	if( (nResult != MA_NOACTIVATE) && (nResult == MA_NOACTIVATEANDEAT) )
	{
		// frame want to activate so activate this window
		::SendMessage((HWND) m_hWndMDIClient, WM_MDIACTIVATE, (WPARAM) m_hWnd, 0);
	}
	return nResult;
}

void CTabbedMDIChildWnd::OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd)
{
	// Trick: Change its parent temporarily
	HWND hWndOldParent = ChangeParent(m_hWndMDIClient);
	__super::OnMDIActivate(bActivate, pActivateWnd, pDeactivateWnd);
	ChangeParent(hWndOldParent);
}

BOOL CTabbedMDIChildWnd::DestroyWindow()
{
	ChangeParent(m_hWndMDIClient);
	return __super::DestroyWindow();
}

LRESULT CTabbedMDIChildWnd::OnSetText(WPARAM, LPARAM lParam)
{
	LPCTSTR szWindowText = (LPCTSTR) lParam;
	LRESULT lRes = Default();
	::SendMessage((HWND) m_hWndMDIClient, WM_SETTEXT, (WPARAM) m_hWnd, lParam);
	return lRes;
}

void CTabbedMDIFrameWnd::CMDIClientHooker::ClearMenu()
{
	if(m_hSubMenu)
	{
		// Clear the menu
		ASSERT(::IsMenu(m_hSubMenu));
		for(int i = GetMenuItemCount(m_hSubMenu)-m_iOriginalMenuItemCount;
			i > 0; --i)
		{
			VERIFY(DeleteMenu(m_hSubMenu, m_iOriginalMenuItemCount, MF_BYPOSITION));
		}
	}
}

void CTabbedMDIFrameWnd::CMDIClientHooker::RefreshMenu()
{
	if(NULL == m_hSubMenu)
	{
		return;
	}
	ClearMenu();

	CString strWindowText;
	CString strMenuText;
	CMenu menu;
	menu.Attach(m_hSubMenu);

	// Add or remove a separator if needed
	if(m_iOriginalMenuItemCount > 0)
	{
		if (0  != menu.GetMenuItemID(m_iOriginalMenuItemCount - 1))
		{
			menu.AppendMenu(MF_SEPARATOR);
		}
		else if(m_iOriginalMenuItemCount == 1)
		{
			// Remove the separator
			m_iOriginalMenuItemCount = 0;
			menu.RemoveMenu(0, MF_BYPOSITION);
		}
	}

	for(size_t i=0; i<m_ZOrder.size(); ++i)
	{
		HWND hWndChild = m_ZOrder[i];
		ASSERT(::IsWindow(hWndChild));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产美女精品一区二区三区| 亚洲伦理在线免费看| 欧美videos中文字幕| 91福利小视频| 欧洲激情一区二区| 欧美日韩一区视频| 欧美精品国产精品| 91精品国产综合久久香蕉的特点 | 热久久国产精品| 午夜精品久久久久久久久久久| 亚洲午夜国产一区99re久久| 午夜在线成人av| 久久精品噜噜噜成人av农村| 久久精品国内一区二区三区| 国产一区二区0| av亚洲精华国产精华| 日本久久电影网| 欧美日韩高清一区二区| 欧美放荡的少妇| 久久免费视频色| 中文字幕亚洲在| 午夜精品久久久久影视| 国产一区不卡在线| 91麻豆6部合集magnet| 91.com视频| 国产婷婷色一区二区三区在线| 中文字幕一区二区三区色视频 | 日韩精品中午字幕| 国产色综合一区| 一卡二卡欧美日韩| 经典一区二区三区| 99re成人在线| 在线免费亚洲电影| 欧美xxxx老人做受| 亚洲精品自拍动漫在线| 久久国产免费看| 色一情一伦一子一伦一区| 日韩亚洲欧美在线| 最好看的中文字幕久久| 另类小说综合欧美亚洲| 91麻豆免费看| 久久久天堂av| 亚洲成人精品影院| 国产99久久精品| 欧美日韩免费电影| 中文字幕一区二区三中文字幕| 日韩—二三区免费观看av| 成人av小说网| 2023国产精品| 丝袜美腿亚洲综合| 色国产综合视频| 国产欧美日韩三级| 久久国产免费看| 色婷婷久久久亚洲一区二区三区| 精品国一区二区三区| 亚洲国产美女搞黄色| 99麻豆久久久国产精品免费优播| 欧美大片国产精品| 亚洲a一区二区| 在线视频一区二区免费| 国产精品免费视频网站| 国精产品一区一区三区mba桃花 | 一区二区在线观看av| 国产成人99久久亚洲综合精品| 在线播放中文一区| 夜夜嗨av一区二区三区四季av| 夫妻av一区二区| 国产亚洲午夜高清国产拍精品| 日本美女一区二区三区视频| 欧美三级资源在线| 亚洲精选在线视频| 91免费版在线看| 亚洲黄色免费电影| 一本色道综合亚洲| 亚洲色图另类专区| 91蝌蚪porny九色| 自拍偷拍国产精品| 91年精品国产| 洋洋av久久久久久久一区| 色婷婷亚洲综合| 亚洲午夜久久久久久久久久久| 在线观看日韩电影| 亚洲国产精品综合小说图片区| 欧美日韩二区三区| 日韩精品91亚洲二区在线观看| 欧美一区在线视频| 久久99精品国产91久久来源| 久久久久久久免费视频了| 国产高清视频一区| 亚洲欧美日韩国产综合在线| 欧美三级韩国三级日本一级| 日本成人在线不卡视频| 日韩三级高清在线| 盗摄精品av一区二区三区| 亚洲欧美一区二区不卡| 精品视频一区三区九区| 久久99精品久久久久久| 国产欧美久久久精品影院| 91免费版pro下载短视频| 午夜精品福利一区二区蜜股av| 精品裸体舞一区二区三区| 国产99久久久国产精品潘金| 亚洲一区二区三区四区在线观看| 欧美老肥妇做.爰bbww| 精品一区二区在线看| 中文字幕在线观看不卡| 欧美人牲a欧美精品| 国产美女主播视频一区| 一区二区高清免费观看影视大全 | 91免费观看国产| 美女在线一区二区| 国产精品国产精品国产专区不片| 欧美色涩在线第一页| 国产成人综合亚洲网站| 夜夜爽夜夜爽精品视频| 国产日韩欧美电影| 欧美日韩中文国产| 91精品国产综合久久蜜臀| 国产精品一区二区男女羞羞无遮挡| 樱桃国产成人精品视频| 久久精品一区二区三区不卡牛牛 | 国产精品毛片大码女人| 欧美日韩精品高清| av亚洲精华国产精华| 九九视频精品免费| 亚洲一区二区三区四区五区中文 | 亚洲国产aⅴ成人精品无吗| 久久久久久久久97黄色工厂| 欧美亚洲动漫另类| 成人免费视频一区| 麻豆极品一区二区三区| 亚洲国产综合色| 亚洲欧洲国产日本综合| 国产欧美日韩在线| 欧美一区二区三区播放老司机| 日本精品一区二区三区四区的功能| 国产一区二区福利| 久久草av在线| 免费观看日韩av| 天天色 色综合| 亚洲国产裸拍裸体视频在线观看乱了 | 一区在线中文字幕| 国产亚洲制服色| 国产夜色精品一区二区av| 日韩三级电影网址| 欧美不卡视频一区| 日韩午夜激情电影| 日韩欧美不卡一区| 欧美一区二区三区四区久久| 在线播放国产精品二区一二区四区| 色综合久久综合网欧美综合网 | 日韩一区二区高清| 成人a级免费电影| 成人精品在线视频观看| 成人午夜在线视频| 不卡的av在线播放| 成人av网址在线| 91一区二区三区在线观看| av网站免费线看精品| 91免费视频观看| 欧美最猛黑人xxxxx猛交| 在线观看不卡一区| 在线观看91av| 精品美女一区二区三区| 久久精品一级爱片| 国产精品久久久久影院亚瑟| 亚洲人午夜精品天堂一二香蕉| 亚洲色图制服诱惑| 亚洲午夜久久久久久久久电影院| 午夜免费欧美电影| 麻豆91在线观看| 懂色av中文一区二区三区| 91视频在线看| 4438亚洲最大| 欧美精品一区二区久久婷婷| 国产精品久久久久一区二区三区共| 亚洲欧洲三级电影| 日韩在线一区二区三区| 国产美女在线精品| 在线视频欧美精品| 日韩精品一区二区三区在线播放| 国产偷v国产偷v亚洲高清| 亚洲欧美自拍偷拍| 秋霞电影一区二区| 处破女av一区二区| 欧美日韩久久一区二区| 久久久久久综合| 亚洲一区二区在线视频| 国产精品主播直播| 欧洲视频一区二区| 久久精品亚洲精品国产欧美| 亚洲综合在线五月| 激情小说欧美图片| 欧美午夜在线一二页| 久久综合九色综合欧美亚洲| 亚洲已满18点击进入久久| 国产一区亚洲一区| 制服丝袜亚洲网站| 亚洲卡通欧美制服中文| 国产精品自拍av|