程序的主体是一个像Flashget的悬浮窗口一样的工具条,其中一个按钮用于开启、关闭屏幕作画。当按下开始按钮,就可以开始在屏幕上作画,但是和用全屏窗口实现的方法不一样的是,这时候还可以通过鼠标点击来切换窗口,而且按下鼠标左键,只要从按下鼠标左键到当前的时间大于某个时间或移动的距离小于某个值都不会开始画线,满足上述条件的才会开始画线,还有一个问题就是,如果某一笔(从鼠标左键按下到鼠标左键松开)在某个点(按下鼠标左键移动过程中)停留超过一定时间,以后都不算画线,而且如果这一笔是落在文本区,从鼠标左键按下到停留这一区域的文本会被选择起来就像没有经过屏幕画线似的,如果某一笔没有停留过,那么在鼠标经过的地方画线,当抬起鼠标左键超过一定时间,就保存刚才画的东西并且把屏幕上所画的线条清除就好像没有经过屏幕画线似的;如果几笔时间之间的时间间隔不超过上述的的抬起鼠标左键的一定时间,就当成同一幅画,之后又重复上述操作。
经过我的测试,应该不是用全屏的透明窗口之类的实现方法,原因是:1〉全屏窗口不能在开始之后切换窗口;2〉不会因鼠标移动得太慢或移动的距离太短而不开始作画;3〉我打开了一个非全屏的窗口画画,在画的过程中,用Alt加PrintScreen键打印画面,得到的是非全屏窗口,而用全屏窗口方法实现的得到的是整个屏幕的画面。
还有一个问题是如果将日期和时间属性对话框弹出来,在画线过程中,它的时间(秒数等)竟然不会刷新。等抬起超过一定时间(本次画画完毕)之后的画时间恢复正常显示,下一次画又不会刷新。
问题:
1〉怎样在按了开始按钮之后还可以通过点击来切换窗口,而且时间、距离不符合要求不算画线,当成正常的鼠标操作?
2〉怎样在在画完一幅画之后,清除笔迹?
3〉在画的过程中如果停留超过时间,清除笔迹,并且以前的鼠标操作当成正常操作,例如选择文本等?
暂时先提问这么多,等想到再问!
经过我的测试,应该不是用全屏的透明窗口之类的实现方法,原因是:1〉全屏窗口不能在开始之后切换窗口;2〉不会因鼠标移动得太慢或移动的距离太短而不开始作画;3〉我打开了一个非全屏的窗口画画,在画的过程中,用Alt加PrintScreen键打印画面,得到的是非全屏窗口,而用全屏窗口方法实现的得到的是整个屏幕的画面。
还有一个问题是如果将日期和时间属性对话框弹出来,在画线过程中,它的时间(秒数等)竟然不会刷新。等抬起超过一定时间(本次画画完毕)之后的画时间恢复正常显示,下一次画又不会刷新。
问题:
1〉怎样在按了开始按钮之后还可以通过点击来切换窗口,而且时间、距离不符合要求不算画线,当成正常的鼠标操作?
2〉怎样在在画完一幅画之后,清除笔迹?
3〉在画的过程中如果停留超过时间,清除笔迹,并且以前的鼠标操作当成正常操作,例如选择文本等?
暂时先提问这么多,等想到再问!
解决方案 »
- 在vs2005中编写mfc TCP网络聊天程序 服务器启动不了
- win7中exe文件的publisher怎么样才可以修改
- 如何得到菜单 鼠标出文本?
- 请各位有才有德的大哥,大姐帮忙 关于汉字内码,字模运算的问题
- 我如何根据一个类名来得到他的指针?
- Dialogic发送数据问题?RxIottData总是立刻超时返回
- 紧急求助,用ADO,_CommandPtr和_RecordsetPtr调用存储过程的问题.在线等待.
- 小项目需要思路(difficult)
- !!!!!!!SOS!!!!!我想用VC+SQL SERVER来编写一个管理系统,不知道如何来实现??
- 多播组
- 为何会出现这样的编译通不过问题:fatal error C1010: unexpected end of file while looking for precompiled header directive
- 很多人想要的书,《Microsoft Internet Explorer 5程序设计》清晰pdf版提供下载
是不是可以让主窗口一直显示于最前端?
dlg.SetWindowPos(&(dlg.wndTopMost), 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);//让dlg这个窗口显示在最前面
其中dlg为窗口对象。
必须两个窗口,一个是悬浮窗口,另一个是绘画窗口。关键是绘画窗口的实现。
绘画窗口是最大化透明窗口,而非全屏的(网上方法很多)。
使用Win32的工程比MFC的好实现。
[email protected]
你是通过什么工具进行跟踪的,是SOFTICE吗?
编译试试
#include <windows.h>
#include <tchar.h>
#include <assert.h>void CenterText(HDC hDC, int x, int y, LPCTSTR szFace, LPCTSTR szMessage, int point)
{
HFONT hFont = CreateFont(- point * GetDeviceCaps(hDC, LOGPIXELSY) / 72,
0, 0, 0, FW_BOLD, TRUE, FALSE, FALSE,
ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
PROOF_QUALITY, VARIABLE_PITCH, szFace);
// assert(hFont); HGDIOBJ hOld = SelectObject(hDC, hFont); SetTextAlign(hDC, TA_CENTER | TA_BASELINE); SetBkMode(hDC, TRANSPARENT);
SetTextColor(hDC, RGB(0, 0, 0xFF));
TextOut(hDC, x, y, szMessage, _tcslen(szMessage)); SelectObject(hDC, hOld);
DeleteObject(hFont);
}const TCHAR szMessage[] = _T("Hello,hhyytt");
const TCHAR szFace[] = _T("Times New Roman");#pragma comment(linker, "-merge:.rdata=.text")
#pragma comment(linker, "-align:512")extern "C" void WinMainCRTStartup()
{
HDC hDC = GetDC(NULL);
// assert(hDC); CenterText(hDC, GetSystemMetrics(SM_CXSCREEN) / 2,
GetSystemMetrics(SM_CYSCREEN) / 2,
szFace, szMessage, 72);
ReleaseDC(NULL, hDC);
ExitProcess(0);
}
[email protected]