graph.DrawImage(m_pImageNum,20*5,0,140,0,14,23,UnitPixel);
// 该函数从 m_pImageClock 中剪切指定 rect 中的像素 draw 到指定位置 S
graph.DrawImage(m_pImageNum,20*6,0,14*(SystemTime.wSecond/10),
0,14,23,UnitPixel); // 该函数从 m_pImageClock 中剪切指定 rect 中的像素 draw 到指定位 / 置
graph.DrawImage(m_pImageNum,20*7,0,14*(SystemTime.wSecond%10),
0,14,23,UnitPixel); // 该函数从 m_pImageClock 中剪切指定 rect 中的像素 draw 到指定位 / 置
// 绘画结束
// 设置窗体的透明特性
SIZE sizeWindow={m_BakWidth,m_BakHeight};
POINT ptSrc={0,0};
DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);//GWL_EXSTYLE;// 获得扩展窗口 风格。
if((dwExStyle&0x80000)!=0x80000)//dwExStyle&0x80000 显示 alpha 透明通道,如 // 为 0x80000 窗体为透明,否则设置为透明
SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);
BOOL bRet=FALSE;
//The UpdateLayeredWindow function updates the position, size, shape, content, and //translucency of a layered window.
// 刷新窗口函数
bRet= UpdateLayeredWindow( m_hWnd,hdcScreen,&ptWinPos,
&sizeWindow,m_hdcMemory,&ptSrc,0,&m_Blend,2);
// 释放环境
graph.ReleaseHDC(m_hdcMemory);
::ReleaseDC(m_hWnd,hdcScreen);
hdcScreen=NULL;
::ReleaseDC(m_hWnd,hdcTemp);
hdcTemp=NULL;
DeleteObject(hBitMap);
DeleteDC(m_hdcMemory);
m_hdcMemory=NULL;
return bRet;
}
void CGDIPClockDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
UpdateClockDisplay();
CDialog::OnTimer(nIDEvent);
}
void CGDIPClockDlg::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnRButtonUp(nFlags, point);
}
void CGDIPClockDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// 禁止显示移动矩形窗体框
::SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,TRUE,NULL,0);
// 非标题栏移动整个窗口
SendMessage(WM_SYSCOMMAND,0xF012,0);
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
CDialog::OnLButtonDown(nFlags, point);
}
5 结语
以上,介绍了在 Windows 下采用 VC++ 进行 PNG 按钮的实现,并结合实例进行了实际运用说明。在传统的 DOS 环境中,要在打印机上打印一幅图时一件非常复杂的事情,用户必须根据打印机类型和指令规则向打印机输入数据。而 Windows 则提供 图形设备接口 GDI ,它是 Graphics Device Interface 的缩写。使得用户直接利用系统的 GDI 函数就能方便实现输入和输出,而不必关心与系统相连的外部设备类型。我们利用 GDI 所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作,能够方便的绘制漂亮的图形界面。 [4]
参 考 文 献
[1 ]乔林,杨志刚等.Visual C++ 6.0 高级编程技术[M ]. 北京:中国铁道出版社,2000.
[2 ]刘长明,杨工明.Visual C++ 实战与提高[M ]. 北京:中国铁道出版社,2001.
[3 ]Jon Bate s · Tim Tompkins. 实用Visual C++ 6.0 教程[M ]. 北京:清华大学出版社,2000.
[4 ]郑阿奇,丁有何,郑进,周怡君.Visual C++ 6.0 实用教程(第三版)[M ]. 北京:电子工业出版社,2007.