Beispiel #1
0
BOOL CExportFileDialog::OnInitDialog() 
{
	CFileDialog::OnInitDialog();
	
	OnTypeChange();
	return TRUE;
}
Beispiel #2
0
	UINT_PTR FileDialog::OFNHookProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
	{
		if(_Handle==0) _Handle = ::GetParent(hDlg);
		if(uMsg==WM_NOTIFY)
		{
			LPOFNOTIFY pon = (LPOFNOTIFY)lParam;
			switch(pon->hdr.code)
			{
			case CDN_SELCHANGE:
				{
					/*if(OnSelChange.IsNull()) break;
					Memory<wchar_t> path(MAX_PATH),file(MAX_PATH);
					int n = (int)::SendMessage(_Handle,CDM_GETFILEPATH,(WPARAM)MAX_PATH,(LPARAM)path.Handle());
					这个消息返回的值包括目录和文件名,目录们没有引号,文件名用空格分隔并且用引号包围,目录和文件名之间没有空格,目录末尾包含反斜杠。
					但是引号有时没有,有时有,如果文件名包含空格,实际上无法正确获取文件名,所以此方法实际上不可用。
					if(n<0) path[0] = 0;
					n = (int)::SendMessage(_Handle,CDM_GETSPEC,(WPARAM)MAX_PATH,(LPARAM)file.Handle());
					这个消息返回文件名,规则同上。
					if(n<0) path[0] = 0;
					OnSelChange(path,file);*/
					break;
				}
			case CDN_FOLDERCHANGE:
				{
					if(!OnFolderChange.IsNull()){
						Memory<wchar_t> path;
						path.SetLength(MAX_PATH);
						int n = (int)::SendMessage(_Handle,CDM_GETFOLDERPATH,(WPARAM)MAX_PATH,(LPARAM)path.Handle());
						if(n<0){
							path[0] = 0;
						}
						OnFolderChange(path,this);
					}
					break;
				}
			case CDN_FILEOK://this message is ago okid message,if return TRUE then no okid message;
				if((!OnFileOk.IsNull())&&(OnFileOk(pon->lpOFN,this)))
				{
					SetWindowLong(_Handle,DWL_MSGRESULT,1L);
					return 1;
				}
				break;
			case CDN_TYPECHANGE:
				if(!OnTypeChange.IsNull()) OnTypeChange(pon->lpOFN->nFilterIndex,this);
				break;
			}
		}
		return 0;
	};
Beispiel #3
0
BOOL CFileDialog::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
	ASSERT(pResult != NULL);

	// allow message map to override
	if (CCommonDialog::OnNotify(wParam, lParam, pResult))
		return TRUE;

#ifndef _MAC
	OFNOTIFY* pNotify = (OFNOTIFY*)lParam;
	switch(pNotify->hdr.code)
	{
	case CDN_INITDONE:
		OnInitDone();
		return TRUE;
	case CDN_SELCHANGE:
		OnFileNameChange();
		return TRUE;
	case CDN_FOLDERCHANGE:
		OnFolderChange();
		return TRUE;
	case CDN_SHAREVIOLATION:
		*pResult = OnShareViolation(pNotify->pszFile);
		return TRUE;
	case CDN_HELP:
		if (!SendMessage(WM_COMMAND, ID_HELP))
			SendMessage(WM_COMMANDHELP, 0, 0);
		return TRUE;
	case CDN_FILEOK:
		*pResult = OnFileNameOK();
		return TRUE;
	case CDN_TYPECHANGE:
		OnTypeChange();
		return TRUE;
	}
#endif

	return FALSE;   // not handled
}
Beispiel #4
0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 通知消息
UINT COpenDlg::OnNotify(WPARAM wParam, LPARAM lParam)
{
	RECT rtRect;
	BOOL bPreview;
	RAWIMAGE riFormat;
	TCHAR tzFileName[MAX_PATH];	

	switch (((LPNMHDR) lParam)->code)
	{
	case CDN_INITDONE:
		// 调整父窗口位置,使其居中与屏幕中心
		GetWindowRect(m_hParent, &rtRect);
		MoveWindow(m_hParent, 
			(GetSystemMetrics(SM_CXSCREEN) - _RectWidth(rtRect) - 20) / 2,
			(GetSystemMetrics(SM_CYSCREEN) - _RectHeight(rtRect)) / 2,
			_RectWidth(rtRect), _RectHeight(rtRect), TRUE);

		// 重新调整窗口大小
		GetClientRect(m_hParent, &rtRect);
		MoveWindow(m_hWnd, 0, 0, _RectWidth(rtRect), _RectHeight(rtRect), TRUE);
		//break;

	case CDN_TYPECHANGE:
		OnTypeChange(((LPOFNOTIFY) lParam)->lpOFN);
		break;

	case CDN_SELCHANGE:
		// 获取文件名
		tzFileName[0] = 0;
		SendMessage(m_hParent, CDM_GETFILEPATH, MAX_PATH, (LPARAM) tzFileName);

		// 更改过滤器
		if (m_bFilterChange)
		{
			m_bFilterChange = FALSE;
		}
		// 设置记录的历史格式
		else if (CIni::GetStruct(INI_HistroyFormat, tzFileName, &riFormat, sizeof(RAWIMAGE)))
		{
			if (riFormat.m_csColorSpace != m_riFormat.m_csColorSpace)
			{
				CopyMemory(&m_riFormat, &riFormat, sizeof(RAWIMAGE));
				SendDlgItemMessage(m_hParent, 0x0470, CB_SETCURSEL, m_riFormat.m_csColorSpace, 0);
			}
			CopyMemory(&m_riFormat, &riFormat, sizeof(RAWIMAGE));
		}
		else
		{
			// 猜测尺寸
			GetSize(tzFileName);
		}

		// 打开文件
		m_pWnd->Open(tzFileName, &m_riFormat);

		// 设置校验过的格式		
		SetDlgItemInt(m_hWnd, IDC_Open_Width, m_riFormat.m_uWidth, FALSE);
		SetDlgItemInt(m_hWnd, IDC_Open_Height, m_riFormat.m_iHeight, TRUE);
		SetDlgItemInt(m_hWnd, IDC_Open_FrameRate, m_riFormat.m_uFrameRate, FALSE);
		SetDlgItemInt(m_hWnd, IDC_Open_FrameStep, m_riFormat.m_iFrameStep, TRUE);
		OnCommand(IDC_RawVideo_Seek);
		break;

	case CDN_FILEOK:
		// 验证格式是否正确
		SetFocus(m_hToolbar);
		if (m_pWnd->m_uTotalFrame)
		{
			m_pWnd->Stop();

			// 保存设置			
			bPreview = IsPreviewChecked();
			CIni::SetInt(INI_OpenPeview, bPreview);

			// 记录历史格式
			m_riFormat = *m_pWnd;
			CIni::SetStruct(INI_HistroyFormat, &m_riFormat, sizeof(RAWIMAGE));
			CIni::SetStruct(INI_HistroyFormat, m_pWnd->m_tzFileName, &m_riFormat, sizeof(RAWIMAGE));
			break;
		}
		else
		{
			SetWindowLongPtr(m_hWnd, DWLP_MSGRESULT, S_FALSE);
			return S_FALSE;
		}
		break;

	case TTN_NEEDTEXT:
		// 显示工具栏提示
		GetMenuString(CMainWnd::m_hMenu, (UINT) wParam, ((LPTOOLTIPTEXT) lParam)->szText, 80, MF_BYCOMMAND);
	}

	return 0;
}