BOOL CDLG07Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
SetTimer(1, 100, NULL);
i = 0;
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CDLG07Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_Picture.SetBitmap(LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1 + i))); //设置位图
CDC* pDC;
CDC memDC;
CBitmap bitmap;
CBitmap* bmp = NULL;
COLORREF col;
CRect rc;
int x, y;
CRgn rgn, tmp;
pDC = GetDC();
GetClientRect(&rc);
bitmap.LoadBitmap(IDB_BITMAP1 + i); //装载模板位图
memDC.CreateCompatibleDC(pDC);
bmp = memDC.SelectObject(&bitmap);
rgn.CreateRectRgn(0, 0, rc.Width(), rc.Height());
//计算得到区域
for (x = 0; x <= rc.Width(); x++)
{
for (y = 0; y <= rc.Height(); y++)
{
//将白色部分取掉
col = memDC.GetPixel(x, y); //得到像素颜色
if (col == RGB(255, 255, 255))
{
tmp.CreateRectRgn(x, y, x + 1, y + 1);
rgn.CombineRgn(&rgn, &tmp, RGN_XOR);
tmp.DeleteObject();
}
}
}
if (bmp)
{
memDC.SelectObject(bmp);
}
SetWindowRgn((HRGN)rgn, TRUE); //设置窗体为区域的形状
ReleaseDC(pDC);
CRect rect;
CPoint nPoint;
GetCursorPos(&nPoint);
GetWindowRect(&rect);
point.x = rect.left;
point.y = rect.top;
int xRc = (nPoint.x - point.x) / 8;
int yRc = (nPoint.y - point.y) / 8;
MoveWindow(point.x + xRc * i, point.y + yRc * i, rect.Width(), rect.Height());
i++;
if (i == 8)i = 0;
CDialogEx::OnTimer(nIDEvent);
}