Advertisement

两种实现CEdit透明的新旧MFC版本示例代码

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本示例展示了如何在MFC应用程序中使用新旧两个不同版本的技术来实现CEdit控件的透明效果,适用于寻求灵活界面设计的开发者。 在MFC编程环境中,CEdit控件是用于创建文本编辑框的标准组件之一。有时设计需求会要求使该控件拥有透明背景以使其内容能与底层窗口的内容相融合。本段落将介绍两种实现CEdit透明的方法:一种适用于较旧的MFC版本(如Visual Studio 6中的MFC 4.2),另一种则针对更新版的MFC。 ### 方法一:适合于MFC 4.2 (VS6) 在旧版的MFC,例如Visual Studio 6所使用的MFC 4.2中实现CEdit透明背景相对简单。其关键在于处理`WM_CTLCOLOR`消息,在对话框收到该消息时可以调整设备上下文(CDC)中的背景模式,并设置一个空画刷来达到效果。 1. 需要重载的函数是`OnCtlColor`,如下所示: ```cpp HBRUSH CAlphaEditboxDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDX, pWnd, nCtlColor); pDC->SetBkMode(TRANSPARENT); hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH); return hbr; } ``` 2. 当CEdit控件失去焦点时,需要调用`Invalidate()`来重绘背景: ```cpp void CAlphaEditboxDlg::OnKillfocusEditkey() { Invalidate(); } void CAlphaEditboxDlg::OnKillfocusEditmessage() { Invalidate(); } void CAlphaEditboxDlg::OnKillfocusEditpath() { Invalidate(); } ``` 请注意,当删除字符时也需要手动重绘背景以保持透明效果。 ### 方法二:适用于新版本MFC 在新版的MFC中实现CEdit控件的透明需要对控件进行子类化,并处理多个消息。原因在于微软的一些改变导致直接设置CLR_NONE或HOLLOW_BRUSH会导致黑色背景,而非所需的效果。 1. 创建一个继承自`CEdit`的新类(例如:`CMyEdit`),并重写其`OnPaint()`函数以使用位图来实现透明效果: ```cpp void CMyEdit::OnPaint() { PAINTSTRUCT ps; TEXTMETRIC tm; // ... 其他初始化代码 ... b.LoadBitmap(IDB_BITMAP1); // 使用与背景匹配的位图 d1.CreateCompatibleDC(p->GetDC()); GetWindowRect(&r); p->ScreenToClient(&r); d1.SelectObject(b); d2->BitBlt(0, 0, r.right - r.left, r.bottom - r.top, &d1, r.left, r.top, SRCCOPY); // ... 其他绘制逻辑 ... } ``` 2. 处理其他消息,如`WM_CHAR`, `WM_LBUTTONDOWN`, 和`WM_LBUTTONUP`等以确保正常输入和交互功能: ```cpp void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // ... 处理字符输入 ... } void CMyEdit::OnLButtonDown(UINT nFlags, CPoint point) { // ... 处理鼠标按下... } void CMyEdit::OnLButtonUp(UINT nFlags, CPoint point) { //... 处理鼠标释放 } ``` 3. 若要移除编辑框的边框,还需要处理`WM_NCPAINT`消息,并且不执行默认的`CDialogEx::OnNcPaint()`以防止绘制边框。 通过上述方法可以在新版MFC中实现CEdit控件透明背景的效果。实际应用时可能需要根据具体需求进一步调整和扩展代码逻辑。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • CEditMFC
    优质
    本示例展示了如何在MFC应用程序中使用新旧两个不同版本的技术来实现CEdit控件的透明效果,适用于寻求灵活界面设计的开发者。 在MFC编程环境中,CEdit控件是用于创建文本编辑框的标准组件之一。有时设计需求会要求使该控件拥有透明背景以使其内容能与底层窗口的内容相融合。本段落将介绍两种实现CEdit透明的方法:一种适用于较旧的MFC版本(如Visual Studio 6中的MFC 4.2),另一种则针对更新版的MFC。 ### 方法一:适合于MFC 4.2 (VS6) 在旧版的MFC,例如Visual Studio 6所使用的MFC 4.2中实现CEdit透明背景相对简单。其关键在于处理`WM_CTLCOLOR`消息,在对话框收到该消息时可以调整设备上下文(CDC)中的背景模式,并设置一个空画刷来达到效果。 1. 需要重载的函数是`OnCtlColor`,如下所示: ```cpp HBRUSH CAlphaEditboxDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDX, pWnd, nCtlColor); pDC->SetBkMode(TRANSPARENT); hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH); return hbr; } ``` 2. 当CEdit控件失去焦点时,需要调用`Invalidate()`来重绘背景: ```cpp void CAlphaEditboxDlg::OnKillfocusEditkey() { Invalidate(); } void CAlphaEditboxDlg::OnKillfocusEditmessage() { Invalidate(); } void CAlphaEditboxDlg::OnKillfocusEditpath() { Invalidate(); } ``` 请注意,当删除字符时也需要手动重绘背景以保持透明效果。 ### 方法二:适用于新版本MFC 在新版的MFC中实现CEdit控件的透明需要对控件进行子类化,并处理多个消息。原因在于微软的一些改变导致直接设置CLR_NONE或HOLLOW_BRUSH会导致黑色背景,而非所需的效果。 1. 创建一个继承自`CEdit`的新类(例如:`CMyEdit`),并重写其`OnPaint()`函数以使用位图来实现透明效果: ```cpp void CMyEdit::OnPaint() { PAINTSTRUCT ps; TEXTMETRIC tm; // ... 其他初始化代码 ... b.LoadBitmap(IDB_BITMAP1); // 使用与背景匹配的位图 d1.CreateCompatibleDC(p->GetDC()); GetWindowRect(&r); p->ScreenToClient(&r); d1.SelectObject(b); d2->BitBlt(0, 0, r.right - r.left, r.bottom - r.top, &d1, r.left, r.top, SRCCOPY); // ... 其他绘制逻辑 ... } ``` 2. 处理其他消息,如`WM_CHAR`, `WM_LBUTTONDOWN`, 和`WM_LBUTTONUP`等以确保正常输入和交互功能: ```cpp void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // ... 处理字符输入 ... } void CMyEdit::OnLButtonDown(UINT nFlags, CPoint point) { // ... 处理鼠标按下... } void CMyEdit::OnLButtonUp(UINT nFlags, CPoint point) { //... 处理鼠标释放 } ``` 3. 若要移除编辑框的边框,还需要处理`WM_NCPAINT`消息,并且不执行默认的`CDialogEx::OnNcPaint()`以防止绘制边框。 通过上述方法可以在新版MFC中实现CEdit控件透明背景的效果。实际应用时可能需要根据具体需求进一步调整和扩展代码逻辑。
  • C++中窗口
    优质
    本示例代码展示了如何在C++编程语言中创建和配置具有透明度效果的Windows窗口。通过调整窗口样式及使用相关API函数,可以灵活地设置透明级别或特定区域的透明性,从而增强应用程序界面的设计感与用户体验。 这是一个用C++实现的透明窗口的例子,以及如何调整窗口的透明度,供参考。
  • MFC位图背景
    优质
    本文介绍了在Microsoft Foundation Classes (MFC)框架下实现具有透明背景的位图的方法和技术,详细阐述了如何操作以确保图像元素能够与显示界面无缝融合。 MFC实现透明位图的透明背景示例代码,记录一下。
  • VC 位图显——背景
    优质
    本文章介绍了如何在VC(Visual C++)环境下使用代码创建并显示一个具有透明度属性的位图,使得位图能够在各种颜色背景下清晰展示而不遮挡背景。适合需要进行图像处理和界面设计的技术人员参考学习。 在计算机图形学领域,透明位图是一种特殊类型的图像文件格式,它允许背景透过某些部分显示出来,从而实现与背景的自然融合效果。这在开发Visual C++(VC)环境下的GUI应用程序时非常常见。 为了理解透明位图的工作机制,首先需要知道它们使用Alpha通道来表示每个像素点的透明程度。传统的24位RGB图像包含红、绿、蓝三个颜色分量,而带有Alpha通道的图像则额外添加了一个用于控制不透明度的信息。这个值通常范围在0到255之间:0代表完全透明,255表示完全不透明。 实现这一功能时,在Visual C++中可以使用GDI(图形设备接口)或更高级别的GDI+库来处理图像文件。特别是,由于GDI+支持Alpha通道的直接操作,因此非常适合用于管理具有半透明效果的位图。 以下为一个简单的示例代码段,展示了如何在VC++项目内利用GDI+加载并显示一张包含Alpha通道信息的PNG格式透明位图: 1. 引入必要的库文件: ```cpp #include using namespace Gdiplus; ``` 2. 初始化GDI+环境: ```cpp GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); ``` 3. 加载位图资源: ```cpp Bitmap* bitmap = new Bitmap(path_to_your_transparent_bitmap.png); //path_to_your_transparent_bitmap.png为透明PNG图片的路径。 ``` 4. 创建Graphics对象以准备绘图操作,并设置所需的区域大小: ```cpp HDC hdc = GetDC(hWnd); Graphics graphics(hdc); ``` 5. 设置混合模式,使得位图能够正确地与背景进行融合显示: ```cpp ColorMatrix colorMatrix = {1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, Alpha通道值,用于控制透明度 }; ImageAttributes imageAttributes; imageAttributes.SetColorMatrix(&colorMatrix); graphics.DrawImage(bitmap, x_position,y_position,bitmap->GetWidth(),bitmap->GetHeight()); ``` 6. 清理资源: ```cpp delete bitmap; GdiplusShutdown(gdiplusToken); ReleaseDC(hWnd,hdc); ``` 通过上述步骤,可以成功地在VC++项目中加载并显示一张支持Alpha通道的PNG透明位图。这一技术被广泛应用于各种界面元素的设计当中,例如对话框、按钮等控件背景或图标设计上,并且可以通过调整Alpha值来实现不同程度的半透明效果。 总之,在现代图形用户界面开发过程中,合理使用透明位图能够显著提升应用程序的整体视觉体验和交互性。
  • QT遮罩
    优质
    本示例展示了如何使用Qt框架创建具有半透明效果的遮罩层,适用于界面美化和用户体验优化。通过调整Alpha值实现窗口元素的渐变显示效果。 QT实现半透明遮罩Demo涉及创建一个可以调节透明度的遮罩层,用于覆盖在其他UI元素之上,并且能够根据需要调整其可见性。这种技术常被应用于对话框、提示信息或任何需要临时聚焦用户注意的部分。通过使用QGraphicsEffect或者QWidget结合自定义绘制函数,开发者可以在QT应用程序中轻松实现这一功能。 具体步骤包括: 1. 创建一个继承自QWidget的类,并在其构造函数中启用透明度支持。 2. 重写paintEvent()方法以自定义遮罩层的外观和效果。 3. 使用QPainter::setOpacity或直接设置窗口的alpha值来调整半透明程度。 4. 可选地,利用信号与槽机制响应用户输入(如鼠标点击)改变遮罩的状态。 这样的实现能够为用户提供更加丰富且互动性更强的应用程序界面。
  • GBDT(GBRT)源
    优质
    本项目包含两个版本的梯度提升决策树(GBDT或称GBRT)源代码,旨在为机器学习开发者提供灵活高效的模型训练方案。 第一个版本是完整版的25M(注释很少),第二个版本是简化版的146KB(注释比较详细)。
  • CSS背景半和文字全效果
    优质
    本示例展示了如何使用CSS创建一个独特的视觉效果:背景设置为半透明状态,而文本则保持完全不透明。通过调整CSS属性,可以轻松地实现这一设计需求,适用于需要突出显示的文字内容或创造柔和、优雅的设计氛围。 在网页设计过程中,有时我们需要创造一种背景半透明但文字清晰可见的效果,这种视觉效果能够为页面增添层次感与美观度。本段落将详细介绍如何利用CSS实现这一目标,并提供一个具体示例。 关键在于使用CSS中的`rgba()`函数来设定背景的透明度。这个函数允许我们定义颜色的同时指定其透明程度,范围在0到1之间,代表完全透明至完全不透明。例如,“rgba(255, 255, 255, 0.5)”表示一个半透明的白色背景。 以具体的代码为例,在`.aside`类中我们设置了淡蓝色且47%透明度的背景色,通过“background-color: rgba(244, 251, 251, 0.47);”实现。这使得背景具有一定的半透明效果而不影响文字阅读。 同时,为了确保文字在浅色背景下清晰可见,我们设置了`.aside`类的文字颜色为白色,“color: #FFFFFF;”。此外还添加了内边距、边框等样式以增强视觉体验。 HTML结构中使用了多个嵌套的“div”元素,并且每个都包含一个“font”标签和一个“span”标签来展示特定信息。虽然在现代网页设计实践中推荐采用语义化的HTML标签,例如`

    `至`

    `或`

    `等,或者通过CSS直接调整字体样式属性如`font-weight`和`font-size`,但此处使用了“”标签以保持示例简洁。 总的来说,借助于CSS的透明度设置功能以及合适的颜色搭配方案,我们可以轻松地创建出背景半透明而文字清晰可见的效果。实际应用中可以根据具体需求调整色彩值与透明度参数来满足不同的设计风格和品牌要求,并且建议采用语义化标签以提高代码可读性和维护性。

  • 优质
    本篇文章介绍了在CSS中实现DIV左右布局的两种常见方法,并提供了相应的示例代码供参考学习。 提供两种CSS div左右布局的示例代码,确保兼容性良好,可以直接复制使用。
  • 优质
    本文介绍在Microsoft Foundation Classes (MFC)框架下如何实现图片的半透明显示效果,通过调整Alpha值来控制图像透明度,使界面更具美观和现代感。 终于实现了对话框上图片的半透明效果,看起来非常美观。整个项目已经打包上传,并且包含了所有的资源图片,运行环境是VC6.0;希望这个成果能得到大家的支持和认可。