【问】屏幕粉笔
小弟近期要参加一个程序设计比赛,自由选材。
我想到的是比较实用的 屏幕粉笔工具 的开发,虽说先网上有好多的这个类型的小工具,可是不是自己的东西不是~~
我只是知道这个跟api有关联、屏幕截图,还有一些详细的我就不知道了...
请各位路过的大侠给点建议和意见哈~~
帮帮忙,不胜感激
[解决办法]
等吃过午饭后,俺下午给你写一个。
[解决办法]
我以前用j2se 写过一个绘图工具,但不是MS里面的全部功能,只现实了一部份功能,而且
兼容性不好,即用自己的绘图工具保存过的文档,只能在自己的绘图工具中打开,其它软件
打不开.
拉伸和翻转功能都没写出来,只写出来个反色功能,透明功能也没写出来:)
到现在为止,我还是不会写上面的几个功能:)
[解决办法]
其实很简单,大体思路是这样:
首先需要一个窗体,和屏幕一样大,然后抓屏(抓全屏,用api实现),将屏幕的图画到窗体上;
然后在窗体上画就行了。
[解决办法]
此外,为防止多个程序实例,建议在main开始处加上:If App.PrevInstance Then Exit Sub
[解决办法]
小胖的问题解决了,牛,还是大家的力量强大啊!
[解决办法]
.686.model flat,stdcalloption casemap:noneincludelib WINDOWS.INCincludelib KERNEL32.INCincludelib USER32.INCinclude masm32.incinclude gdi32.incincludelib KERNEL32.LIBincludelib USER32.LIBincludelib masm32.libincludelib gdi32.libinclude macro.asm; -----------------------------------; INPUT red, green & blue BYTE values; OUTPUT DWORD COLORREF value in eax; -----------------------------------RGB macro red, green, blue ;输入RGB,合成一个32位值放在EAX中 xor eax, eax mov ah, blue ; blue mov al, green ; green rol eax, 16 mov al, red ; redendm.data? lpMsg MSG <> TimerID dd ? iCount dd ? buffer db 100 dup(?) hMine dd ? ;找到的NotePad的handle hdc dd ? ;找到的NotePad的DC的Hand hFont dd ? ;创建一种字体.codeTimerProc proclocal cfRGB:COLORREFlocal fnText:HGDIOBJ invoke FindWindow,CTEXT('notepad'),NULL .if (EAX==0) invoke wsprintf,offset buffer,CTEXT("%d 没有找到记事本",10,13),iCount invoke StdOut, offset buffer inc iCount ret .endif mov hMine,EAX ;保存NotePad的Handler invoke GetDC,EAX ;取得 DC mov hdc,EAX invoke CreateFont,\ 100,\ 40,\ 0,\ 0,\ FW_BLACK,\ 0,\ 0,\ 0,\ ANSI_CHARSET,\ OUT_DEFAULT_PRECIS,\ CLIP_CHARACTER_PRECIS,\ DEFAULT_QUALITY,\ DEFAULT_PITCH or FF_SWISS,\ CTEXT("宋体") mov hFont,eax ;保存一下这种字体的handle invoke SelectObject,hdc,hFont ;将这种字体设置给DC RGB 200,200,50 invoke SetTextColor,hdc,eax ;准备好笔 RGB 0,0,255 invoke SetBkMode,hdc,eax ;准备好背景 invoke TextOut,hdc,50, 50,CTEXT('很黄很暴力...'),14 ;写字啦 invoke DeleteObject,hFont ;释放字体 invoke ReleaseDC,hMine,hdc ;释放DC invoke wsprintf,offset buffer,CTEXT("画一下",13,10),NULL invoke StdOut, offset buffer ret TimerProc endpStart: invoke SetTimer, NULL, 0, 1000, addr TimerProc ;200ms一次,触发 TimerProc mov TimerID,eax ;存一下,释放的时候还要用 .WHILE TRUE invoke GetMessage, ADDR lpMsg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR lpMsg invoke DispatchMessage, ADDR lpMsg .ENDW invoke KillTimer, NULL, TimerID ;释放定时器 ;暂停显示,回车键关闭 invoke StdIn,addr buffer,sizeof buffer invoke ExitProcess,0end Start