VC中使用CMFCEditBrowseCtrl 可以實作在Edit控件中加入一個按鈕,提供選擇檔案或者檔案功能.
使用該類時,要注意,
1、InitInstance 中一定要先調用 CWinAppEx::GetShellManager();
2、建立控件變量,類型為 CMFCEditBrowseCtrl;
3、調用 CMFCEditBrowseCtrl::EnableFileBrowseButton或CMFCEditBrowseCtrl::EnableFolderBrowseButton 設定浏覽模式。
靜态編譯時按鈕圖示消失解決方案:
靜态連結時:
void CMFCEditBrowseCtrl::SetInternalImage()
{
if (m_ImageBrowse.GetSafeHandle() != NULL)
{
m_ImageBrowse.DeleteImageList();
}
UINT uiImageListResID = afxGlobalData.Is32BitIcons() ? IDB_AFXBARRES_BROWSE32 : IDB_AFXBARRES_BROWSE;
LPCTSTR lpszResourceName = MAKEINTRESOURCE(uiImageListResID);
ENSURE(lpszResourceName != NULL);//這兒會為空
HBITMAP hbmp = (HBITMAP) ::LoadImage(
AfxFindResourceHandle(lpszResourceName, RT_BITMAP), lpszResourceName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
if (hbmp == NULL)
{
TRACE(_T("Can't load bitmap: %x\n"), uiImageListResID);
return;
}
BITMAP bmpObj;
::GetObject(hbmp, sizeof(BITMAP), &bmpObj);
UINT nFlags = ILC_MASK;
//.......
}
如上面紅色部分所示,靜态連結時IDB_AFXBARRES_BROWSE32 這個icon資源沒有包進來,加下面代碼即可
在xxx.rc中加
#ifndef _AFXDLL
#include "afxribbon.rc" // Ribbon and control bars
#endif