如何在 Mfc c++ 中创建透明矩形?

Posted

技术标签:

【中文标题】如何在 Mfc c++ 中创建透明矩形?【英文标题】:How to create transparent Rectangle in Mfc c++? 【发布时间】:2015-06-19 01:58:13 【问题描述】:

我想创建一个完全透明的矩形,我试试这段代码。知道该怎么做吗?

 BOOL ChtmlDlgTestDlg::PreTranslateMessage(MSG* pMsg)
    

        if (pMsg->message == WM_MOUSEMOVE && (pMsg->wParam & MK_LBUTTON))
        
            CPoint p = pMsg->pt;
            ScreenToClient(&p);
            CRect r(10, 15, 380, 50);
            CDC* pCDC = GetDC();
            pCDC->Rectangle(r);
            CBrush brush;


            brush.CreateSolidBrush(RGB(255, 255, 0));
            pCDC->FillRect(&r, &brush);



            if (r.PtInRect(p))
            
                ReleaseCapture();
                SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, 0);
                SendMessage(WM_NCLBUTTONUP, HTCAPTION, 0);
                return 1;
            

        
        return CDHtmlDialog::PreTranslateMessage(pMsg);
    

这是 mfc c++ 代码示例。

【问题讨论】:

“完全透明”是什么意思?如果它是完全透明的,您将无法看到它。 这就是我想要的。我不想看到。 这非常困难,因为CDHtmlDialog 对话框是位于不同线程中的 webBrowser 控件。窗口的非客户区是 MFC 进程的一部分,它让您获得有限的控制权,只能移动窗口和其他东西。过度使用PreTranslateMessage 可能会给您带来麻烦,因为消息可能会变成递归调用。我能问一下你想做什么吗?使用纯 HTML5 和 javascript 可以做很多事情。另一个选项是CHtmlEditCtrl,您可以将这些控件放在CDialog 中。 【参考方案1】:

首先:如果你创建了一个实心画笔,然后用它做了一个 FillRect,你到底想如何创建一个透明矩形?

如果你想用画笔来做,你必须用一个“不画任何东西”的画笔,比如:

brush.CreateStockObject(NULL_BRUSH);

您可能想要一个带有不透明边框和透明内部的矩形。在这种情况下,除了空画笔之外,您需要创建的对象是一个 CPen。

CPen p(PS_SOLID, 0, RGB(255, 255, 0));
pCDC->SelectObject(&p);
pCDC->Rectangle(r);

其次,如果您不关心边框颜色,我认为DrawEdge 函数是最简单的方法(颜色是固定的;在 Google 图像中搜索 DrawEdge 以了解我的意思)。

【讨论】:

以上是关于如何在 Mfc c++ 中创建透明矩形?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2017 中创建 Visual c++ MFC 控制台项目

在 MFC 中的 groupbox 或图片控件中创建矩形

如何在 java 中创建一些东西来根据纵横比调整图像的大小和位置? [关闭]

如何使用 CWinThread 在 MFC 中创建工作线程?

如何在 iOS8 的通知窗口中创建按钮?

如何在 MFC C++ 中为文本添加下划线