社区
C++ Builder
帖子详情
TextOutA的使用?
ljwwjh
2003-06-18 10:19:49
TextOutA输出字到Canvas时,如何不带底色?
...全文
209
5
打赏
收藏
TextOutA的使用?
TextOutA输出字到Canvas时,如何不带底色?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
laoriver08
2003-06-18
打赏
举报
回复
楼上的对
Siney
2003-06-18
打赏
举报
回复
那么就设置
Brush->Style=bsClear;
然后再
TextOut
ljwwjh
2003-06-18
打赏
举报
回复
我用TBitmap向Canvas画了图,我想用TextOutA透明输出字到Canvas.
Siney
2003-06-18
打赏
举报
回复
底色需要单独设置
Canvas->Brush->Color是用来设置底色
domustdo
2003-06-18
打赏
举报
回复
canvas不带色么
在win32下Hook系统API.txt
3.1 程序说明 当启动程序Try.EXE调用SetMouseHook()后,Windows系统将MouseHook.DLL映射入每一个有鼠标消息传入的进程地址空间。映射时将用DLL_PROCESS_ATTACH作为参数fdwReason的值调用DllEntryPoint(),DllEntryPoint()调用ModifyCall()搜索该进程对
Text
OutA()的调用并将其替换为调用My
Text
Out()。这样当该进程调用GDI32.DLL的
Text
OutA()时实际调用的却是MouseHook.DLL的My
Text
Out()。 ModifyCall()利用进程的HINSTANCE(也即HMODULE,对于Win32而言它们是一回事,即装载基址)找到DOS文件头结构IMAGE_DOS_HEADER,再利用IMAGE_DOS_HEADER中的e_lfanew成员找到Win32的IMAGE_NT_HEADERS结构,该结构含有动态连接所需的信息。IMAGE_NT_HEADERS中的OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]含有DLL函数引入表的RVA(相对虚拟地址)和大小。搜索该表所指向的DLL引入函数地址,值与GetProcAddress()返回值相同的单元就是对应的DLL函数地址存放单元,将My
Text
Out()地址写入即可。详细情形请参阅有关PE文件格式的说明和Winnt.h中的定义。 当启动程序调用UnMouseHook()时,过程与之类似,只是此时是为了卸下WH_MOUSE全局钩子并恢复原来对
Text
OutA()的调用。 此处设置WH_MOUSE全局钩子的目的只是利用全局钩子的特性将MouseHook.DLL“挤进”其它进程的地址空间,因此钩子过程MouseProc()很简单,只是传递一下消息而已。 两个#pragma data_seg()编译器指令是为了定义一个名为.MouseHook的数据段(更确切地说是数据节),该数据段在MouseHook.DEF中被说明为共享,之所以如此是因为各个进程空间中的MouseProc()需要该钩子的句柄hMouseHook,而hMouseHook只在启动程序Try.EXE调用SetMouseHook()时得到一次,因此只能放在共享内存中,否则编程将变得复杂起来。至于每个进程中被替换下来的
Text
OutA()地址,是属于单个进程空间的,故放在局部数据中,Windows系统会为每次映射
使用
不同的内存。实际上,
Text
OutA()的引入地址在所有的进程中都是相同的,这是因为为了页面管理的简单和进程切换的效率,对每个进程Windows 9x将系统DLL映射在同一地址上,但这不是Windows对外保证的,而只是权宜之计,以后可能改变,且Windows NT的情况也可能不同。 My
Text
Out()将截获的
Text
OutA()的参数lp
Text
(即输出字符串)改变以后才输出,从而可以看到截获是否成功。之所以改变两个字符而不是简单的一个,是因为只改变一个字符将导致汉字输出乱码。 My
Text
Out()源码中唯一的一条汇编语句__asm sub esp,14h是所有源码中最难写的语句。如果没有这条指令,My
Text
Out()将无法正确返回到进程调用
Text
OutA()处的下一条指令上,出现的“意外”情况是:进程调用
Text
OutA()的最后一个参数、即输出字符串长度参数将作为返回地址从堆栈中弹出,从而使EIP为一个很小的值,程序进入Windows系统用作指针检查的低端内存,导致非法内存访问。在调试过程中发现导致这种现象的原因是My
Text
Out()在临返回前
使用
了add esp,14h来清除并不需要清除的堆栈,从而破坏了堆栈。显然,原因在于函数调用说明使编译器产生了“错误”的堆栈管理代码,我不知道如何改正这一点,只好
使用
__asm sub esp,14h强行使堆栈指针指向“正确”的返回地址。有知晓个中奥妙的同志请与作者联系,多多指教。 以下程序在Windows 98、Microsoft Visual Studio 97中调试通过,由于编程中并未
使用
Windows 9x的特性,且程序依靠的PE文件格式在Windows 9x和Wiundows NT中是通用的,因此上述方法在Windows NT可能也是可行的,只是我并未验证(我没有装Windows NT的机器)。另外,某些方面的情况由于编译器和操作系统不同可能会有所不同(如编译器生成的指令),我的叙述会因此而偏颇甚至错误,在此先做个提醒,也欢迎来意见改进编程。
OpenG框架实现
void C09990156View::OnDraw(CDC* pDC) { CTest3Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CPaintDC DC(this); glLoadIdentity(); glClearColor(1.0f,1.0f,1.0f,1.0f); //把红、绿、蓝分量分别指定为1、0、0 glClear(GL_COLOR_BUFFER_BIT); if (m_bLine) { glBegin(GL_LINES); glColor3f(m_r,m_g,m_b); //直线的R、G、B颜色值调用 glVertex2f(m_Lx1,m_Ly1); glVertex2f(m_Lx2,m_Ly2); glEnd(); } if (m_bPoint) { glBegin(GL_POINTS); glColor3f(m_r,m_g,m_b); //点的R、G、B颜色值调用 glVertex2f(m_PtX,m_PtY); glEnd(); } glFlush(); SwapBuffers(DC.m_hDC); HDC hdc=wglGetCurrentDC(); ::SetBkMode(hdc,TRANSPARENT); ::Set
Text
Color(hdc,RGB(250,0,0)); ::
Text
OutA(hdc,0,0,"计算机图形学示例程序",20); ::
Text
OutA(hdc,0,20,"09990156黄慧勤",14); ::
Text
OutA(hdc,0,40,"2012年10月",10); }
易语言彩色日记
易语言彩色日记源码,彩色日记,彩色的字,
Text
OutA,Set
Text
Color,SetBkMode,GetWindowDC,ReleaseDC,DeleteDC,SetWindow
Text
A
llPDFLib.v3.6.Full.Source ,BCB中可直接生成pdf文件
by wxy 1.用cb6,在install components处打开llPDFLibCB6.bpk,并选取相应的cpp,编译 2.此时提示Link时候出错,提示qrpt60.lib打不开,此问题已解决。 3.PLongint数据类型问题已修正。 4.
使用
方法,new a project,put a PDFDocument1 and a button,on btnclick,enter: this->PDFDocument1->FileName="C:\\111.pdf"; this->PDFDocument1->BeginDoc(); this->PDFDocument1->Canvas->
Text
OutA(100,100,"1234567"); this->PDFDocument1->EndDoc(); 以上四句话,就可以生产一个pdf文件,不需要安装虚拟打印机了。 enjoy it! 2011年11月10日
易语言多彩文字
易语言多彩文字源码,多彩文字,彩色的字,
Text
OutA,Set
Text
Color,SetBkMode,GetWindowDC,ReleaseDC,DeleteDC,SetWindow
Text
A
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章