【发布时间】:2021-09-05 08:00:13
【问题描述】:
工具:Visual Studio 2019、MFC、cpp
我正在寻找如何更改CFileDialog 对话框的背景颜色。我找到了这个链接 ==> Q115087: HOWTO: Change the Background Color of a Common Dialog。
我已提取此代码并将其全部插入到我的项目中,然后是两个文件mydlg.h 和 mydlg.cpp。我将CFileDialog 对象替换为mydlg。
这是包含的代码:
头文件 ==> mydlg.h
//
#include <dlgs.h>
#define BACKGROUNG_COLOR RGB(0, 0, 255)
//////////////////////////////////////////////////////////////////////
// CMyDlg dialog
class CMyDlg : public CFileDialog
{
// Construction
public:
CMyDlg(CWnd* pParent = NULL); // standard constructor
// Add a CBrush pointer to store the new background brush
CBrush m_pBkBrush;
// Dialog Data
//{{AFX_DATA(CMyDlg)
enum { IDD = FILEOPENORD };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// Implementation
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Generated message map functions
//{{AFX_MSG(CMyDlg)
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
代码文件 CMyDlg.cpp
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/): CFileDialog(TRUE, NULL, NULL, OFN_HIDEREADONLY)
{
//{{AFX_DATA_INIT(CMyDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg, CFileDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////
// CMyDlg message handlers
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
m_pBkBrush.CreateSolidBrush(BACKGROUNG_COLOR);
switch (nCtlColor) { // ==> breakpoint here
case CTLCOLOR_STATIC:
{
// Set the static text to white on blue.
pDC->SetBkColor(BACKGROUNG_COLOR); return (m_pBkBrush);
}
case CTLCOLOR_DLG: return (m_pBkBrush);
default: return CFileDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
我怎么称呼它
CMyDlg FileOpenDialog(TRUE,NULL,local_File,OFN_FILEMUSTEXIST |
OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,
OpenFilter, // filter
AfxGetMainWnd()); // the parent window
CString local_string= Current_Dir();
FileOpenDialog.m_ofn.lpstrInitialDir = local_string;
status = Mess.LoadString(IDS_STRING191);
FileOpenDialog.m_ofn.lpstrTitle = Mess;
if (FileOpenDialog.DoModal() == IDOK)
{
pszSource = FileOpenDialog.m_ofn.lpstrFile;
return true;
}
return false;
编译成功
观察背景颜色不变
当我在 OnCtlColor 函数中的开关上放置一个停止点时,我们不会通过那里。
你有什么想法,可以帮帮我吗? 谢谢
【问题讨论】:
-
如果您放弃了这个问题,请考虑关闭your other version。
-
请花一些时间来正确格式化您的问题。问题编辑器右上角有一个“Markdown 编辑帮助”按钮。
-
您发布的参考资料上有旧日期(1986-2002)也许该方法适用于旧版本的
CFileDialog(在 Windows Vista 之前)我怀疑它适用于新文件对话框,因为你只对其某些程序的间接访问有限。所以你必须从头开始编写自己的对话框。或者可能有一种方法可以强制 MFC 使用旧对话框(它不漂亮)。请注意,如果您使用标准文件对话框,没有人会抱怨。
标签: c++ winapi mfc common-dialog