Exemplo n.º 1
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 调整状态栏大小及位置
VOID CChildWnd::AdjustStatusBar(WPARAM wParam, LPARAM lParam)
{
	INT i;
	INT j;
	RECT rtRect;
	INT iParts[] = {-1, 50, 35, 40, 35, 35, 50, 50};

	for (i = 0; i < _NumOf(iParts); i++)
	{
		iParts[i] = LOWORD(lParam);
		_ExIf(wParam != SIZE_MAXIMIZED, iParts[i] -= 16);
		for (j = i + 1; j < _NumOf(iParts); j++)
		{
			iParts[i] -= iParts[j];
		}
	}
	_ExIf(wParam == SIZE_MAXIMIZED, iParts[_NumOf(iParts) - 1] -= -1);

	SendMessage(m_hStatusBar, SB_SETPARTS, _NumOf(iParts), (LPARAM) iParts);
	SendMessage(m_hStatusBar, WM_SIZE, wParam, lParam);

	SendMessage(m_hStatusBar, SB_GETRECT, m_uEditBox, (LPARAM) &rtRect);
	InflateRect(&rtRect, -2, -2);
	MoveWindow(m_hEditBox, rtRect.left, rtRect.top, _RectWidth(rtRect), _RectHeight(rtRect), TRUE);
}
Exemplo n.º 2
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 构造函数
HWND CChildWnd::Create()
{
	// 转到开始
	Restart();

	// 获取窗口状态
	BOOL bMaximized = CClientWnd::GetChildCount() ? 
		((GetWindowLong(CClientWnd::m_hWnd, GWL_EXSTYLE) & WS_EX_CLIENTEDGE) == FALSE) : CIni::GetInt(INI_MaxOnOpen);

	// 创建窗口	
	m_hWnd = CreateMDIWindow(STR_AppName TEXT("ChildWnd"), m_tzFileName, 0, 
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
		CClientWnd::m_hWnd, g_hInst, (LPARAM) this);

	if (m_hWnd)
	{
		// 调整播放窗口大小
		SetVideoSize(m_uWidth, m_uHeight);
		_ExIf(bMaximized, ShowWindow(m_hWnd, SW_MAXIMIZE));

		// 播放设置
		SetPlayWnd(m_hPlayWnd);
		_ExIf(CIni::GetInt(INI_DirectDraw, TRUE), EnableDDraw());
		_ExIf(CIni::GetInt(INI_PlayOnOpen), Play());
	}

	return m_hWnd;
}
Exemplo n.º 3
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 弹出菜单初始化
VOID CMainWnd::OnMenuPopup(WPARAM wParam, LPARAM lParam)
{
	HWND hWnd;
	DWORD dwSize;
	TCHAR tzTemp[512];
	TCHAR tzPath[512];

	switch (GetMenuItemID((HMENU) wParam, 0))
	{
	case IDM_Help_Desktop:
		// 判断快捷方式是否存在
		CheckCommand(IDM_Help_Desktop, CShortcut::Exist(CSIDL_DESKTOP));
		CheckCommand(IDM_Help_StartMenu, CShortcut::Exist(CSIDL_STARTMENU));
		CheckCommand(IDM_Help_ProgramMenu, CShortcut::Exist(CSIDL_PROGRAMS));
		CheckCommand(IDM_Help_QuickLaunch, CShortcut::Exist(CSIDL_APPDATA));
		CheckCommand(IDM_Help_VisualStudio, CVSTool::Exist());
		break;

	case IDM_Play_Play:
		hWnd = CClientWnd::GetActive();
		_ExIf(hWnd, SendMessage(hWnd, WM_INITMENUPOPUP, wParam, lParam));
		break;

	case IDM_View_Toolbar:
		GetModuleFileName(NULL, tzTemp, MAX_PATH);
		wsprintf(tzPath, TEXT("\"%s\" \"%%1\""), tzTemp);
		dwSize = _NumOf(tzTemp);
		SHGetValue(HKEY_CLASSES_ROOT, STR_AppName TEXT("\\shell\\open\\command"), NULL, NULL, tzTemp, &dwSize);
		CheckCommand(IDM_View_AssociateFile, lstrcmpi(tzTemp, tzPath) == 0);			
		break;
	}
}
Exemplo n.º 4
0
VOID CClientWnd::OnChildOpenClose(BOOL bOpen)
{
	_ExIf(m_bScrabble, OnPlayScrabble());

	if (bOpen)
	{
		m_uChildNum++;
		if (m_uChildNum == 1)
		{
			EnableCommand();
			CMainWnd::EnableCommand(IDM_Play_Synchronize, FALSE);
			CMainWnd::EnableCommand(IDM_Play_Scrabble, FALSE);
		}
		else if (m_uChildNum == 2)
		{
			CMainWnd::EnableCommand(IDM_Play_Synchronize, TRUE);
			CMainWnd::EnableCommand(IDM_Play_Scrabble, TRUE);
		}
	}
	else
	{
		m_uChildNum--;
		if (m_uChildNum <= 1)
		{
			if (m_uChildNum == 0)
			{
				// 保存子窗口最大化状态
				BOOL bMaximized = (HasEdge() == FALSE);
				CIni::SetInt(INI_MaxOnOpen, bMaximized);
				_ExIf(bMaximized, SetEdge());

				EnableCommand(FALSE);
			}
			CMainWnd::EnableCommand(IDM_Play_Synchronize, FALSE);
			CMainWnd::EnableCommand(IDM_Play_Scrabble, FALSE);
		}
	}
}
Exemplo n.º 5
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 类型改变
VOID COpenDlg::OnTypeChange(LPOPENFILENAME pOfn)
{
	UINT i;
	PTSTR p;
	UINT uMax;	
	TCHAR tzExt[16];

	// 获取选择类型
	p = (PTSTR) pOfn->lpstrFilter;
	i = pOfn->nFilterIndex;
	_ExIf(i > 0, i--);
	m_riFormat.m_csColorSpace = (COLORSPACE) i;

	// 设置默认扩展名
	uMax = m_riFormat.m_csColorSpace * 2 + 1;		
	for (i = 0; i < uMax; i++, p += lstrlen(p) + 1);
	lstrcpyn(tzExt, p + 2, _NumOf(tzExt));
	p = _StrChr(tzExt, ';');
	_ExIf(p, *p = 0);
	SendMessage(m_hParent, CDM_SETDEFEXT, 0, (LPARAM) ((tzExt[0] != '*') ? tzExt : NULL));

	m_bFilterChange = TRUE;
}
Exemplo n.º 6
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 大小改变
VOID CMainWnd::OnSize(WPARAM wParam, LPARAM lParam)
{
	if (wParam == SIZE_MINIMIZED)
	{
		if (IsMenuChecked(IDM_View_MinToTray))
		{
			// 添加系统托盘图标,隐藏主窗口
			OnTrayIcon();
		}
	}
	else
	{
		MoveWindow(CClientWnd::m_hWnd, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
		_ExIf(CClientWnd::IsScrabble(), CClientWnd::Scrabble());
	}
}
Exemplo n.º 7
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 枚举版本并操作
BOOL CVSTool::Operate(BOOL bDotNet, INT iCommand)
{
	DWORD i;
	HKEY hKey;
	BOOL bResult;
	LONG lResult;
	DWORD dwSize;
	HKEY hToolKey;
	FILETIME ftTime;
	TCHAR tzName[MAX_PATH];
	TCHAR tzToolKey[MAX_PATH];

	// 打开键值
	lResult = RegOpenKeyEx(HKEY_CURRENT_USER, bDotNet ? TEXT("Software\\Microsoft\\VisualStudio") : TEXT("Software\\Microsoft\\Devstudio"), 0, KEY_ALL_ACCESS, &hKey);
	if (lResult != ERROR_SUCCESS)
	{
		return FALSE;
	}

	// 枚举版本循环
	for (i = 0, bResult = FALSE; (bResult == FALSE) || (iCommand != 0); i++)
	{
		// 枚举版本
		dwSize = MAX_PATH;
		lResult = RegEnumKeyEx(hKey, i, tzName, &dwSize, NULL, NULL, NULL, &ftTime);
		if (lResult != ERROR_SUCCESS)
		{
			break;
		}

		// 打开工具菜单键值
		wsprintf(tzToolKey, TEXT("%s\\%s"), tzName, bDotNet ? TEXT("External Tools") : TEXT("Tools"));
		lResult = RegOpenKeyEx(hKey, tzToolKey, 0, KEY_ALL_ACCESS, &hToolKey);
		if (lResult == ERROR_SUCCESS)
		{
			_ExIf(Operate(hToolKey, bDotNet, iCommand), bResult = TRUE);
			RegCloseKey(hToolKey);
		}
	}

	RegCloseKey(hKey);

	return bResult;
}
Exemplo n.º 8
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 缩放
VOID CChildWnd::OnPlayZoom(UINT uCmd, BOOL bCascade)
{
	DWORD dwWidth;
	DWORD dwHeight;

	_ExIf(bCascade && (CClientWnd::HasEdge() == FALSE), SendMessage(CClientWnd::m_hWnd, WM_MDICASCADE, 0, 0));
	dwWidth = m_uWidth;
	dwHeight = m_uHeight;
	if (uCmd == IDM_Play_ZoomHalf)
	{
		dwWidth /= 2;
		dwHeight /= 2;
	}
	else if (uCmd == IDM_Play_ZoomDouble)
	{
		dwWidth *= 2;
		dwHeight *= 2;
	}
	SetVideoSize(dwWidth, dwHeight);
}
Exemplo n.º 9
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 命令处理
VOID COpenDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
	INT i;
	RECT rtRect;
	BOOL bPreview;
	PUINT puValue;
	const UINT c_uFormats[][2] = 
	{
		{352, 288}, {176, 144}, {128, 96},
		{320, 240}, {160, 120},
		{640, 480}, {320, 240}, {160, 120},
		{352, 240}, {352, 288},
		{720, 480}, {720, 576},
	};

	_ExIf((HWND) lParam == m_hToolbar, SetFocus(m_hToolbar));
	switch (LOWORD(wParam))
	{
	case IDC_Open_MulSignText:
		if (m_hFormatMenu == NULL)
		{
			m_hFormatMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_Menu_Format));
		}
		GetWindowRect(GetDlgItem(m_hWnd, IDC_Open_MulSignText), &rtRect);
		TrackPopupMenu(GetSubMenu(m_hFormatMenu, 0), TPM_TOPALIGN, rtRect.left, rtRect.top, 0, m_hWnd, NULL);
		break;

	case IDM_Format_CIF:
	case IDM_Format_QCIF:
	case IDM_Format_SUBQCIF:
	case IDM_Format_SIF:
	case IDM_Format_QSIF:
	case IDM_Format_VGA:
	case IDM_Format_QVGA:
	case IDM_Format_QQVGA:
	case IDM_Format_VCDNTSC:
	case IDM_Format_VCDPAL:
	case IDM_Format_DVDNTSC:
	case IDM_Format_DVDPAL:
		i = LOWORD(wParam) - IDM_Format_CIF;
		SetDlgItemInt(m_hWnd, IDC_Open_Width, c_uFormats[i][0], FALSE);
		SetDlgItemInt(m_hWnd, IDC_Open_Height, c_uFormats[i][1], TRUE);
		OnCommand(MAKELONG(IDC_Open_Width, EN_KILLFOCUS));
		OnCommand(MAKELONG(IDC_Open_Height, EN_KILLFOCUS));
		break;

	case IDC_Open_Preview:
		// 切换预览
		if (HIWORD(wParam) == BN_CLICKED)
		{
			IsPreviewChecked() ? InvalidateRect(m_hWnd, &m_rtPreview, TRUE) : m_pWnd->Stop();
			OnCommand(IDC_RawVideo_Seek);
		}
		break;

	case IDC_Open_Width:
	case IDC_Open_Height:
	case IDC_Open_FrameRate:
	case IDC_Open_FrameStep:
		if (HIWORD(wParam) == EN_KILLFOCUS)
		{
			switch (LOWORD(wParam))
			{
			case IDC_Open_Width:
				puValue = &m_riFormat.m_uWidth;
				break;

			case IDC_Open_Height:
				puValue = (PUINT) &m_riFormat.m_iHeight;
				break;

			case IDC_Open_FrameRate:
				puValue = &m_riFormat.m_uFrameRate;
				break;

			case IDC_Open_FrameStep:
				puValue = (PUINT) &m_riFormat.m_iFrameStep;
				break;
			}

			// 限制尺寸范围
			*puValue = GetDlgItemInt(m_hWnd, LOWORD(wParam), NULL, TRUE);
			m_pWnd->Open(m_pWnd->m_tzFileName, &m_riFormat);
			SetDlgItemInt(m_hWnd, LOWORD(wParam), *puValue, TRUE);
		}
		break;

	case IDM_Play_Play:
		m_pWnd->TogglePlay();
		break;

	case IDM_Play_GotoStart:
		m_pWnd->Stop();
		m_pWnd->Seek(0);
		break;

	case IDM_Play_GotoEnd:
		m_pWnd->Stop();
		m_pWnd->Seek(MAX_Frame);
		break;

	case IDM_Play_StepBackward:
		m_pWnd->Stop();
		m_pWnd->Step(-1);
		break;

	case IDM_Play_StepForward:
		m_pWnd->Stop();
		m_pWnd->Step(1);
		break;

	case IDC_RawVideo_Play:
		SendMessage(m_hToolbar, TB_CHECKBUTTON, IDM_Play_Play, lParam);
		break;

	case IDC_RawVideo_Change:
		bPreview = CanPreview();
		for (i = IDM_Play_Play; i <= IDM_Play_GotoEnd; i++)
		{
			SendMessage(m_hToolbar, TB_ENABLEBUTTON, i, MAKELONG(bPreview, 0));
		}

		i = m_pWnd->m_uTotalFrame ? (m_pWnd->m_uTotalFrame - 1) : 0;
		SendDlgItemMessage(m_hWnd, IDC_Open_FrameStepSpin, UDM_SETRANGE, 0, MAKELONG(i, -i));		
		InvalidateRect(GetDlgItem(m_hWnd, IDC_Open_FrameStepSpin), NULL, FALSE);

		// 计算位置和尺寸
		CopyRect(&rtRect, &m_rtPreview);
		InflateRect(&rtRect, -5, -5);
		i = MulDiv(m_pWnd->m_uWidth, _RectHeight(m_rtPreview), m_pWnd->m_iHeight);
		if (i > _RectWidth(rtRect))
		{
			i = MulDiv(m_pWnd->m_iHeight, _RectWidth(rtRect), m_pWnd->m_uWidth);
			if (_RectHeight(rtRect) > i)
			{
				rtRect.top += (_RectHeight(rtRect) - i) / 2;
				rtRect.bottom = rtRect.top + i;
			}
		}
		else
		{
			rtRect.left += (_RectWidth(rtRect) - i) / 2;
			rtRect.right = rtRect.left + i;
		}
		m_pWnd->SetDrawRect(&rtRect);

		SetDlgItemInt(m_hWnd, IDC_Open_TotalFrame, m_pWnd->m_uTotalFrame, FALSE);
		InvalidateRect(m_hWnd, &m_rtPreview, TRUE);
		break;

	case IDC_RawVideo_Seek:
		if (CanPreview())
		{
			SetDlgItemInt(m_hWnd, IDC_Open_StatusText, m_pWnd->m_uCurFrame + 1, FALSE);
		}
		else
		{
			SetDlgItemText(m_hWnd, IDC_Open_StatusText, NULL);
		}
		break;
	}
}
Exemplo n.º 10
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 设置格式
BOOL CChildWnd::OnChangeFormat()
{
	TCHAR tzText[16];

	INT i = GetDlgItemInt(m_hStatusBar, IDC_EditBox, NULL, TRUE);
	CRawImage riFormat = *this;

	switch (m_uEditBox)
	{
	case SBI_ColorSpace:
		GetWindowText(m_hEditBox, tzText, _NumOf(tzText));
		riFormat.m_csColorSpace = CS_ALL;
		for (i = 0; i < _NumOf(c_tzColorSpace); i++)
		{
			if (lstrcmpi(tzText, c_tzColorSpace[i]) == 0)
			{
				riFormat.m_csColorSpace = (COLORSPACE) (i % CS_ALL);
				break;
			}
		}
		if (riFormat.m_csColorSpace == CS_ALL)
		{
			return FALSE;
		}
		else if (riFormat.m_csColorSpace == m_csColorSpace)
		{
			return TRUE;
		}
		break;

	case SBI_Width:
		i = (i + 1) & ~1;		
		_ReturnValIf(riFormat.m_uWidth == (UINT) i, TRUE);
		riFormat.m_uWidth = i;
		break;

	case SBI_Height:
		i = (i + 1) & ~1;
		_ReturnValIf(riFormat.m_iHeight == i, TRUE);
		riFormat.m_iHeight = i;
		break;

	case SBI_FrameRate:
		_ReturnValIf(riFormat.m_uFrameRate == (UINT) i, TRUE);
		riFormat.m_uFrameRate = i;
		break;

	case SBI_FrameStep:
		riFormat.m_iFrameStep = GetDlgItemInt(m_hStatusBar, IDC_EditBox, NULL, TRUE);
		_ReturnValIf(riFormat.m_iFrameStep == m_iFrameStep, TRUE);
		break;

	case SBI_CurFrame:
		if ((i > 0) && (i <= (INT) m_uTotalFrame))
		{
			Stop();
			Seek(i - 1);
			return TRUE;
		}		

	default:
		return FALSE;
	}

	_ExIf(CClientWnd::IsScrabble(), CClientWnd::OnPlayScrabble());

	Open(m_tzFileName, &riFormat);
	EnableDDraw();
	Draw();

	// 记录历史格式
	CIni::SetStruct(INI_HistroyFormat, m_tzFileName, &riFormat, sizeof(RAWIMAGE));

	return TRUE;
}
Exemplo n.º 11
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 子窗口回调函数
LRESULT CALLBACK CChildWnd::ClildWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	CChildWnd *pThis;
	LPMDICREATESTRUCT pmcsCreate;

	switch (uMsg)
	{
	case WM_CREATE:
		// 获取 this 指针
		_Assert(lParam);
		pmcsCreate = (LPMDICREATESTRUCT) ((LPCREATESTRUCT) lParam)->lpCreateParams;
		_Assert(pmcsCreate);
		pThis = (CChildWnd *) pmcsCreate->lParam;
		_Assert(pThis);		
		pThis->m_hWnd = hWnd;
		pThis->OnCreate();
		break;

	case WM_WINDOWPOSCHANGED:
		// 位置改变
		GetWnd(hWnd)->SetDrawRect();
		break;

	case WM_SIZE:
		// 尺寸改变
		if (wParam != SIZE_MINIMIZED)
		{
			_Assert(GetWnd(hWnd));
			GetWnd(hWnd)->OnSize(wParam, lParam);
		}
		break;

	case WM_INITMENUPOPUP:
		if (GetMenuItemID((HMENU) wParam, 0) == IDM_Play_Play)
		{
			GetWnd(hWnd)->OnMenuPopup();
		}
		break;

	case WM_NOTIFY:
	case WM_MENUSELECT:
	case WM_EXITMENULOOP:
		// 设置工具栏和状态栏提示信息
		OnNotify(hWnd, uMsg, wParam, lParam);
		break;

	case WM_COMMAND:
		// 命令消息
		GetWnd(hWnd)->OnCommand(wParam, lParam);
		break;

	case WM_KILLFOCUS:
		// 取消
		_ExIf(GetWnd(hWnd)->m_bExporting, SetFocus(hWnd));
		break;

	case WM_KEYDOWN:
		// 取消
		_ExIf(wParam == VK_ESCAPE, GetWnd(hWnd)->m_bCancel = TRUE);
		break;

	case WM_NCDESTROY:
		// 窗口销毁
		CClientWnd::OnChildOpenClose();
		_Assert(GetWnd(hWnd));
		delete GetWnd(hWnd);
		break;
	}

	return DefMDIChildProc(hWnd, uMsg, wParam, lParam);
}
Exemplo n.º 12
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 命令处理
VOID CMainWnd::OnCommand(WPARAM wParam, LPARAM lParam)
{
	PTSTR p;
	DWORD dwSize;
	CChildWnd *pWnd;	
	TCHAR tzTemp[512];
	TCHAR tzPath[512];

	if ((LOWORD(wParam) >= IDM_View_Default) && (LOWORD(wParam) < IDM_View_Default + 50))
	{
		// 改变语言
		if (IsMenuChecked(LOWORD(wParam)) == FALSE)
		{
			OnViewLanguage(LOWORD(wParam));
		}
		return;
	}
	else if ((LOWORD(wParam) >= IDM_File_Recent) && (LOWORD(wParam) < IDM_File_Recent + 10))
	{
		// 打开新近文件
		GetMenuString(m_hMenu, LOWORD(wParam), tzTemp, _NumOf(tzTemp), MF_BYCOMMAND);
		OnFileOpen(tzTemp + 4);
		return;
	}

	switch (LOWORD(wParam))
	{
	case IDM_File_Open:
		OnFileOpen((PTSTR) lParam);
		break;

	case IDM_File_Exit:
		PostMessage(m_hWnd, WM_CLOSE, 0, 0);
		break;

	case IDM_View_Toolbar:
	case IDM_View_StatusBar:
	case IDM_View_AlwaysOnTop:
	case IDM_View_MinToTray:
	case IDM_View_ShowSplash:
	case IDM_View_ShowOpen:
	case IDM_View_PlayOnOpen:
		// 查看选项
		OnViewMenu(LOWORD(wParam), FALSE);
		break;

	case IDM_View_AssociateFile:
		GetModuleFileName(NULL, tzPath, MAX_PATH);
		wsprintf(tzTemp, TEXT("\"%s\" \"%%1\""), tzPath);
		dwSize = _NumOf(tzPath);
		SHGetValue(HKEY_CLASSES_ROOT, STR_AppName TEXT("\\shell\\open\\command"), NULL, NULL, tzPath, &dwSize);
		if (lstrcmpi(tzTemp, tzPath) == 0)
		{
			SHDeleteKey(HKEY_CLASSES_ROOT, STR_AppName);

			for (p = STR_ExtList; *p; p += lstrlen(p) + 1)
			{
				SHDeleteKey(HKEY_CLASSES_ROOT, p);
			}
		}
		else
		{
			SHSetValue(HKEY_CLASSES_ROOT, 
				STR_AppName TEXT("\\shell\\open\\command"), NULL, REG_SZ, tzTemp, _StrSize(tzTemp));

			GetModuleFileName(NULL, tzPath, MAX_PATH);
			wsprintf(tzTemp, TEXT("\"%s\",1"), tzPath);
			SHSetValue(HKEY_CLASSES_ROOT, STR_AppName TEXT("\\DefaultIcon"), NULL, REG_SZ, tzTemp, _StrSize(tzTemp));

			for (p = STR_ExtList; *p; p += lstrlen(p) + 1)
			{
				SHSetValue(HKEY_CLASSES_ROOT, p, NULL, REG_SZ, STR_AppName, sizeof(STR_AppName));
			}
		}
		break;

	case IDM_Window_Cascade:
		SendMessage(CClientWnd::m_hWnd, WM_MDICASCADE, 0, 0);
		return;

	case IDM_Window_TitleHorz:
		SendMessage(CClientWnd::m_hWnd, WM_MDITILE, MDITILE_HORIZONTAL, 0);
		break;

	case IDM_Window_TitleVert:
		SendMessage(CClientWnd::m_hWnd, WM_MDITILE, MDITILE_VERTICAL, 0);
		break;

	case IDM_Window_ArrangeIcons:
		SendMessage(CClientWnd::m_hWnd, WM_MDIICONARRANGE, 0, 0);
		break;

	case IDM_Window_CloseAll:
		CClientWnd::CloseAll();
		break;

	case IDM_Help_Content:
		// 查看帮助内容
		GetModuleFileName(NULL, tzTemp, MAX_PATH);
		lstrcpy(_StrEnd(tzTemp) - _LenOf(EXT_Chm), EXT_Chm);
		if (ShellExecute(NULL, NULL, tzTemp, NULL, NULL, SW_SHOW) <= (HINSTANCE) 32)
		{
			ErrorBox(ERR_HelpErr);
		}
		break;

	case IDM_Help_Desktop:
	case IDM_Help_StartMenu:
	case IDM_Help_ProgramMenu:
	case IDM_Help_QuickLaunch:
	case IDM_Help_VisualStudio:
		// 创建或删除快捷方式
		OnHelpShortcut(LOWORD(wParam));
		break;

	case IDM_Help_About:
		// 显示关于对话框
		CAboutDlg::Show(m_hWnd);
		break;

	case IDC_TrayIcon:
		// 系统托盘消息
		if ((lParam == WM_LBUTTONUP) || (lParam == WM_RBUTTONUP))
		{
			OnTrayIcon(FALSE);
		}
		break;

	default:
		pWnd = CClientWnd::GetChildWnd();
		_ExIf(pWnd, pWnd->OnCommand(wParam, lParam));
	}
}
Exemplo n.º 13
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 获取窗口状态
BOOL CXPGetState(PCLASSXP pCxp)
{
    PCLASSXP p;
    UINT uCheck;

    // 设置禁用和焦点状态
    pCxp->lState = _CXPGetStyle(WS_DISABLED) ? CXPS_DISABLED : 0;
    _ExIf(pCxp->hWnd == GetFocus(), _CXPSetState(CXPS_FOCUS));

    switch (pCxp->uClass)
    {
    case CXPC_BUTTON:
        switch (_CXPGetStyle(BS_TYPEMASK))
        {
        case BS_DEFPUSHBUTTON:		// 默认按钮
            _CXPSetState(CXPS_DEFAULT);

        case BS_PUSHBUTTON:			// 普通按钮
            break;

        case BS_CHECKBOX:			// 复选框
        case BS_AUTOCHECKBOX:		// 自动复选框
        case BS_3STATE:				// 三状态复选框
        case BS_AUTO3STATE:			// 自动三状态复选框

        case BS_RADIOBUTTON:		// 单选框
        case BS_AUTORADIOBUTTON:	// 自动单选框
            if (!_CXPGetStyle(BS_PUSHLIKE))
            {
                pCxp->pDraw = CXPDrawCheckBox;
            }
            break;

        default:					// 自绘按钮、组合框和其它未知类型
            return FALSE;
        }
        uCheck = (LONG) SendMessage(pCxp->hWnd, BM_GETCHECK, 0, 0);
        if (uCheck == BST_CHECKED)
        {
            _CXPSetState(CXPS_CHECKED);
        }
        else if (uCheck == BST_INDETERMINATE)
        {
            _CXPSetState(CXPS_INDETERMINATE);
        }
        break;

    case CXPC_EDITBOX:
        if (!_CXPGetStyle(WS_BORDER) && !(GetWindowLong(pCxp->hWnd, GWL_EXSTYLE) & (WS_EX_CLIENTEDGE | WS_EX_STATICEDGE)))
        {
            return FALSE;
        }
        _ExIf(_CXPGetStyle(ES_READONLY), _CXPSetState(CXPS_READONLY));
        break;

    case CXPC_COMBOBOX:
        if (_CXPGetStyle(CBS_TYPEMASK) == CBS_SIMPLE)
        {
            _CXPSetState(CXPS_SIMPLECMB);
        }
        break;

    case CXPC_SPINBOX:
        _ExIf(_CXPGetStyle(UDS_HORZ), _CXPSetState(CXPS_HORIZON));
        _ExIf(_CXPGetStyle(UDS_ARROWKEYS), _CXPSetState(CXPS_ACCELSPIN));
        _ExIf(_CXPGetStyle(UDS_ALIGNLEFT), _CXPSetState(CXPS_LEFTSPIN));
        _ExIf(_CXPGetStyle(UDS_ALIGNRIGHT), _CXPSetState(CXPS_RIGHTSPIN));

        // 设置旧伙伴
        p = (PCLASSXP) pCxp->lParam;
        _ExIf(p, p->lParam = 0);

        p = (PCLASSXP) GetProp((HWND) SendMessage(pCxp->hWnd, UDM_GETBUDDY, 0, 0), TEXT("ClassXP"));
        if (p && (p->uClass == CXPC_EDITBOX))
        {
            // 设置新伙伴
            p->lParam = (LPARAM) pCxp;
            pCxp->lParam = (LPARAM) p;
        }
        break;
    }

    return TRUE;
}