关于MFC界面设计的问题:
发布网友
发布时间:2022-04-24 00:05
我来回答
共3个回答
热心网友
时间:2023-10-14 19:54
软件界面的形状貌似不可改变。颜色倒是可以设置的
重载函数HBRUSH CExtractStringDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何特性
if(nCtlColor == CTLCOLOR_LISTBOX)
{
pDC->SetBkMode(TRANSPARENT);
// 列表框字体颜色
pDC->SetTextColor(RGB(185, 0, 0));
return m_hbrush;
}
else if(nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetTextColor(RGB(0, 0, 255));
pDC->SetBkColor(RGB( 255, 255, 0));
HBRUSH h = ::CreateSolidBrush(RGB(255, 255, 0));
return h;
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
在初始化对话框加入m_hbrush = CreateSolidBrush(RGB(205, 255, 205));
热心网友
时间:2023-10-14 19:54
可以通过自画对话框以及贴图来实现您的需求。
热心网友
时间:2023-10-14 19:55
界面的形状可以这样处理,你先在矩形界面上把你不要的部分用别的颜色区别,然后创建窗口后让这颜色透明就行啦。透明代码:(这代码是别人的,我做界面时可以用,希望对你有帮助)
#define LWA_COLORKEY 0x00000001 //方式
#define WS_EX_LAYERED 0x00080000
typedef BOOL (WINAPI *lpfnSetLayeredWindowAttributes)(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
lpfnSetLayeredWindowAttributes SetLayeredWindowAttributes;
//设置成边缘透明
COLORREF maskColor=RGB(0,0,0); //你要透明的颜色
HMODULE hUser32 = GetMoleHandle("user32.dll"); //加载动态链接库SetLayeredWindowAttributes = (lpfnSetLayeredWindowAttributes)GetProcAddress(hUser32,"SetLayeredWindowAttributes");
//取得SetLayeredWindowAttributes函数指针
//为窗口加入WS_EX_LAYERED扩展属性
SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE)^WS_EX_LAYERED);
//调用SetLayeredWinowAttributes函数
SetLayeredWindowAttributes(this->GetSafeHwnd(), maskColor, 192, LWA_COLORKEY);
FreeLibrary(hUser32); //释放动态链接库
以上代码加入OnInitDialog()中,其中 SetLayeredWindowAttributes(this->GetSafeHwnd(), maskColor, 192, LWA_COLORKEY); 里,maskColor为将进行透明处理的颜色, 192为透明度, LWA_COLORKEY为透明方式。
若要透明整个对话框,则LWA_COLORKEY=2;
若要对选定颜色透明,则LWA_COLORKEY=1;