文章目录
- 抠图
- 贴图
- 添加消息命中
抠图
请添加图片描述
BOOL CPokemonDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
//加载图片
//CBitmap m_bmp;
m_bmp.LoadBitmap(IDB_BITMAP1);
//获取图片的宽和高
BITMAP logBmp;
m_bmp.GetBitmap(&logBmp);
//创建内存DC
CDC memDC;
memDC.CreateCompatibleDC(NULL);
memDC.SelectObject(&m_bmp);
//移动窗口大小
MoveWindow(300, 200, logBmp.bmWidth, logBmp.bmHeight,TRUE);
//创建不规则窗口
CRgn m_wndRgn;
m_wndRgn.CreateRectRgn(0,0, logBmp.bmWidth,logBmp.bmHeight);
//挖掉空白
for (int x = 0; x < logBmp.bmWidth; x++)
{
for (int y = 0; y < logBmp.bmHeight; y++)//循环获取每一个像素点
{
CRgn rgn;
rgn.CreateRectRgn(x, y, x + 1, y + 1);
if (memDC.GetPixel(x, y) == RGB(0, 0, 0))
{
m_wndRgn.CombineRgn(&m_wndRgn, &rgn, RGN_XOR);//去除白色
}
}
}
SetWindowRgn(m_wndRgn,TRUE);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
贴图
void CPokemonDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//贴图
CPaintDC dc(this);
//创建内存DC
CDC memDC;
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(&m_bmp);
//获取图片的宽和高
BITMAP logBmp;
m_bmp.GetBitmap(&logBmp);
//贴图
dc.BitBlt(0, 0, logBmp.bmWidth, logBmp.bmHeight,&memDC,0,0, SRCAND);
CDialogEx::OnPaint();
}
}
添加消息命中
LRESULT CPokemonDlg::OnNcHitTest(CPoint point)
{
LRESULT result = CDialogEx::OnNcHitTest(point);
if (result == HTCLIENT)
{
result = HTCAPTION;
}
return result;
}