QQ 静态截图程序模拟实现
2007-03-17 22:01:09 来源:WEB开发网核心提示: 三、从Edit类中派生一个CMyEdit类,用该类的实例对像显示操作提示信息,在 CMyEdit::OnEraseBkgnd中,用一位图填充背景,类中响应了WM_MOUSEMOVE消息,在CMyEdit::OnMouseMove(UINT nFlags, CPoint point) 中移动
三、从Edit类中派生一个CMyEdit类,用该类的实例对像显示操作提示信息,在 CMyEdit::OnEraseBkgnd中,用一位图填充背景,类中响应了WM_MOUSEMOVE消息,在CMyEdit::OnMouseMove(UINT nFlags, CPoint point) 中移动窗口在左上角和右上角之间来回移动.
CRect rect;
GetWindowRect(&rect);
int xScreen = GetSystemMetrics(SM_CXSCREEN);
//int ySCreen = GetSystemMetrics(SM_CYSCREEN);
if(m_bMove)
{
//移动到左上角
MoveWindow(10,10,rect.Width(),rect.Height());
m_bMove=FALSE;
}
else
{
//移动到右上角
MoveWindow(xScreen-180,10,rect.Width(),rect.Height());
m_bMove=TRUE;
}
在主对话框上放置编缉框,然后关联一个CMyEdit的变量,在主对话显示时移动到左上角
//把对化框设置成全屏顶层窗口
SetWindowPos(&wndTopMost,0,0,m_xScreen,m_yScreen,SWP_SHOWWINDOW);
//移动操作提示窗口
CRect rect;
m_tipEdit.GetWindowRect(&rect);
m_tipEdit.MoveWindow(10,10,rect.Width(),rect.Height());
//显示操作提示窗口文字
DrawTip();
//捕获按键消息窗口,将对话框的句柄传递到CCatchScreenApp中
((CCatchScreenApp *)AfxGetApp())->m_hwndDlg=m_hWnd;
四、程序中有两个重要成员函数,一个是画截取矩形时的信息显示在鼠标右上角。
//显示截取矩形信息
void CCatchScreenDlg::DrawMessage(CRect &inRect)
{
//截取矩形大小信息离鼠标间隔
const int space=3;
//设置字体颜色大小
CClientDC dc(this);
CPoint pt;
CPen pen(PS_SOLID,1,RGB(147,147,147));
dc.SetTextColor(RGB(147,147,147));
CFont font;
font.CreatePointFont(90,"宋体");
dc.SelectObject(&font);
//得到字体宽度和高度
GetCursorPos(&pt);
dc.SetBkMode(TRANSPARENT);
TEXTMETRIC tm;
int charHeight;
CSize size;
int lineLength;
dc.GetTextMetrics(&tm);
charHeight = tm.tmHeight+tm.tmExternalLeading;
size=dc.GetTextExtent("顶点位置 ",strlen("顶点位置 "));
lineLength=size.cx;
//初始化矩形, 以保证写下六行文字
CRect rect(pt.x+space,pt.y-charHeight*6-space,pt.x+lineLength+space,pt.y-space);
int x = GetDeviceCaps(dc, HORZRES);
int y = GetDeviceCaps(dc, VERTRES);
//创建临时矩形
CRect rectTemp;
//当矩形到达桌面边缘时调整方向和大小
if((pt.x+rect.Width())>=x)
{
//桌面上方显示不下矩形
rectTemp=rect;
rectTemp.left=rect.left-rect.Width()-space*2;
rectTemp.right=rect.right-rect.Width()-space*2;;
rect=rectTemp;
}
if((pt.y-rect.Height())<=0)
{
//桌面右方显示不下矩形
rectTemp=rect;
rectTemp.top=rect.top+rect.Height()+space*2;;
rectTemp.bottom=rect.bottom+rect.Height()+space*2;;
rect=rectTemp;
}
//创建空画刷画矩形
dc.SelectObject((HBRUSH)GetStockObject(NULL_BRUSH));
dc.Rectangle(rect);
//在矩形中显示文字
CString string(" 顶点位置 ");
dc.TextOut(rect.left,rect.top,string);
string.Format(" (%d,%d)",inRect.left,inRect.top);
dc.TextOut(rect.left,rect.top+charHeight,string);
string=" 矩形大小 ";
dc.TextOut(rect.left,rect.top+charHeight*2,string);
string.Format(" (%d,%d)",inRect.Width(),inRect.Height());
dc.TextOut(rect.left,rect.top+charHeight*3,string);
string=" 光标坐标 ";
dc.TextOut(rect.left,rect.top+charHeight*4,string);
string.Format(" (%d,%d)",pt.x,pt.y);
dc.TextOut(rect.left,rect.top+charHeight*5,string);
}
根据鼠标的位置和要显示的字的宽度各高度在鼠标左上角位置处构造一个CRect对像,在CRect中显示矩形信息,同时根据鼠标当前的位置,在左边和上边不能正常显示信息时动态度反转矩形,还有一个类是DrawTip()在鼠标按下、松下是显示相应的操作提示
更多精彩
赞助商链接