如何在 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 控制台项目
如何在 java 中创建一些东西来根据纵横比调整图像的大小和位置? [关闭]