MFC使用button選択ファイル(クリップ)の実装

1447 ワード

1.ファイルを開く
	CFileDialog ObjFile(TRUE, NULL, NULL, OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY,
_T("    (*.png; *.jpg; *.jpeg; *.bmp)|*.png; *.jpg; *.jpeg; *.bmp|    (*.*)|*.*||"), NULL);
	if (IDOK == ObjFile.DoModal())
	{
		m_strImgPath = ObjFile.GetPathName();
        }

インタフェースでこのボタンを使用すると、メインインタフェースのタイトルバーがグレーになります.つまり、フォーカスが失われます.解決策:
  • VS 2008以上のバージョンを使用するとこの問題が発生し、ここで最も直接的な処理方法:
  • インタフェースのCDialogExをすべてCDialogに置き換えると解決する(拡張ウィンドウクラスの小さなバグと主観的に考えられる)
  • 拡張クラスのいくつかの特性を使用する必要がある場合は、
  • の代わりに、次の方法を使用することもできます.
           CFileDialog ObjFile(TRUE, NULL, NULL, OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY,
                                             NULL, theApp.GetMainWnd()->GetWindow (GW_HWNDPREV));
           if (IDOK == ObjFile.DoModal())
           { 
                ...
                SetFocus();
            }

     
    2.フォルダを開く
    	CString strDirPath;
    	BROWSEINFO stDirInfo;
    	::ZeroMemory(&stDirInfo, sizeof(stDirInfo));
    
    	stDirInfo.pidlRoot = 0;
    	stDirInfo.lpszTitle = _T("        :");
    	stDirInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX | BIF_DONTGOBELOWDOMAIN;
    	stDirInfo.lpfn = nullptr;
    
    	LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&stDirInfo);
    	if (nullptr != lpidlBrowse)
    	{
    		if (::SHGetPathFromIDList(lpidlBrowse, strDirPath.GetBuffer(MAX_PATH)))
    		{
    		    //       strDirPath,         
                    }
    		::CoTaskMemFree(lpidlBrowse);
    	}