随笔- 295
文章- 0
评论- 9
阅读-
46万
06 2011 档案
在对话框显示图片的方法
摘要:添加函数:// 显示位图bool CPictureDlg::LoadPicture(void){ CDC *dc; dc=GetDC(); //得到对话框的设备环境 CDC dcMemory; dcMemory.CreateCompatibleDC(dc); //得到与对话框设备环境相兼容的内存DC CBitmap *bitmap = new CBitmap(); HBITMAP hbitmap; //装载图片 hbitmap=(HBITMAP)::LoadImage(NULL, "F://风景.bmp",IMAGE_BITMAP,0,0,LR...
阅读全文
OnSize() 与 OnInitDialog()[设置控件大小]
摘要:今天写了这样的一些代码://使控件的大小跟随窗口的大小而变化//////////////////////////////////////////////////////void CPlannerDlg::OnSize(UINT nType, int cx, int cy){ CDialog::OnSize(nType, cx, cy); m_Calendar.MoveWindow(100,100,200,200,0);} 但是每次运行都有ASSERT()错误。 本以为是变量与控件的关系没有关联好,就测试了一下,发现并没有问题。 于是在OnInitDialog()于OnSize() 中分别插入了
阅读全文
汇编 ADD与DAA指令
摘要:压缩BCD码调整指令语法格式: DAA ; 调整AL中的和为压缩BCD码 DAS ; 调整AL中的差为压缩BCD码功能描述: DAA:通常先执行ADD/ADC指令,将2个压缩BCD码相加,结果存放在AL中。然后使用该指令将AL调整为压缩BCD码格式。 DAS:通常先执行SUB/SBB指令,将2个压缩BCD码相减,结果存放在AL中。然后使用该指令将AL调整为压缩BCD码格式。对标志位的影响:OF不确定;CF反映压缩BCD码相加/相减的进位/借位状态;按一般规则影响SF和ZF。说明:若使用DAA/DAS指令,则参加加法/减法运算的操作数应该是压缩BCD码。如果将任意2个二进制数相加/减,然后调整,
阅读全文
汇编中定义数组与变量
摘要:汇编这样可以直接读写内存的程序也需要用到变量。但它不像其它高级语言那样把变量分成许多类型,它是按照变量的长度来区分的,所以定义(define)变量时就用5个不同的关键字:DB,DW,DD,DQ,DT(事实上常用的只有DB,DW)DB(DEFINE BYTE)即定义的变量占一个字节的长度(也可以说把定义的变量值放入一个字节的内存空间)如:a DB 7h ;意思是将7h放入内存的某一个字节(空间)中,然后让变量a指向这个字节也可以这样:a DB 'h' ;虽然‘h’是个字符但存入内存却成了它对应的ASCII码48h你也可以用DB来定义数组,如:a DB 48h, 65h, 6Ch,
阅读全文
汇编lea 指令与 mov 指令
摘要:比如你用local在栈上定义了一个局部变量LocalVar,你知道实际的指令是什么么?一般都差不多像下面的样子: push ebp mov esp, ebp sub esp, 4 现在栈上就有了4各字节的空间,这就是你的局部变量。 接下来,你执行mov LocalVar, 4,那么实际的指令又是什么?是这样: mov dword ptr [ebp-4], 4 于是,这个局部变量的“地址”就是ebp-4——显然,它不是一个固定的地址。现在需要将它的“地址”作为参数传给某个函数,你这样写: invoke/call SomeFunc, add...
阅读全文
汇编LODSB/LODSW指令
摘要:字符串操作指令 汇编语言中,串操作指令LODSB/LODSW是块装入指令,其具体操作是把SI指向的存储单元读入累加器,LODSB就读入AL,LODSW就读入AX中,然后SI自动增加或减小1或2.其常常是对数组或字符串中的元素逐个进行处理。例如:驻留程序使用 "base memory size in KB" of BIOS Data Area (0040h:0013h)给自己程序开辟2K内存,程序可以这样实现:push esmov si,0413h ; using "base memory size in KB" of BIOS Data Area (00
阅读全文
21H中断
摘要:中断的语法格式: INT n ; 调用中断n的中断服务程序。n 为中断号,取值0 ~ 255。 对标志位的影响:不影响CF、OF、SF、ZF。 MS DOS使用中断号21H作为系统调用,为程序员提供了上百种系统服务功能,对这些功能的调用步骤如下: (1)由AH给出功能号。 (2)根据相应功能的要求,设置入口参数。 (3)INT 21H。 (4)分析和使用出口参数。 其中,最常用的是功能号4CH,用来实现程序退出、并返回DOS。使用方法如下: mov ah, 4ch int 21h INT 21H 中断AH功能调用参数返回参数00程序终止(同INT 20H)CS=程序段前缀 01键盘输入并...
阅读全文
汇编 中断调用表 (中断向量表)
摘要:中断 0: 除数为0错 中断 1: 单步中断 中断 2: 不可屏蔽中断 NMI 中断 3: 断电中断 (CCH) 中断 4: 溢出中断 中断 5: 屏幕打印中断 中断 6-7: 保留 中断 8: 计时器中断(18.2/秒) 中断 9: 键盘中断 中断 A-D: 保留 中断 E: 软盘机中断 中断 F: 保留 中断 10: 屏幕I/O调用 中断 11: 设备检查调用 中断 12: 存贮器检查调用 中断 13: 软盘机I/O调用 中断 14: RS-232 I/O 调用 中断 15: 盒带机I/O调用 中断 16: 键盘I/O调用 中断 17: 打印机I/O调用 中断 18: ROM-BASIC入
阅读全文
汇编逻辑运算指令
摘要:1. 否操作指令NOTNOT OPRD把OPRD取反,再回送给OPRD对标志位没有影响2. 与操作指令AND[与]AND OPRD1,OPRD2OPRD1和OPRD2执行与操作,结果送到OPRD1执行后,CF=OF=0,标志PF,ZF,SF反映运算结果,AF未定义某个操作数自身与,值不变,可使进位标志CF=03. 或操作指令OR[或]OR OPRD1 OPRD2标志位同与运算指令某个操作数自身或,值不变,可使进位标志CF=04. 异或操作指令XOR[异或]XOR OPRD1 OPRD2标志位同与运算指令某个操作数自身异或,值不变,可使进位标志CF=0与0异或,不变,与1异或,取反。5. 测试指
阅读全文
SHL与SHR指令
摘要:SHL与SHR指令shl ax,n ;ax里的数左移n位(2进制的)即乘以2n,同时把最后位移到CL寄存器中shr ax,n ;ax里的数右移n位(2进制的)即除以2n,同时把最后位移到CL寄存器中移位指令经常用来简便乘除运算如果要移动的位数s大于1,则需要把移动位数放到CL里面,如下:shl ax, cl如果第二个操作数不写cl而写ah,就无法编译通过:
阅读全文
ASSUME伪指令
摘要:assume最典型的用法: 是指明变量与段寄存器的联系,比如 assume ds:data,它是告诉编译器以后所有在data段中定义的变量寻址时,使用ds作为段地址,但是它不对程序作任何事,比如你必须自己对ds赋值,这也就是为什么dos下典型的汇编段如下: .data ........ .code ........ assume cs:code,ds:data proc main far mov ax,data mov ds,ax ... endp end 需要注意的是cs不需要赋值,因为它是由操作系统调用程序时赋值的。 ASSUM...
阅读全文
汇编指令速查
摘要:数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,
阅读全文
8086寄存器组
摘要:在8086的EU和BIU两部分中包含有一些工作寄存器,这些寄存器用来存放计算过程中的各种信息,如操作数地址、操作数及运算的中间结果等。微处理器从寄存器中存取数据比从存储器中存取数据要快的多,因此,在计算过程中,合理利用寄存器保存操作数、中间结果或其它信息,能提高程序的运行效率。根据这些寄存器所起的作用,8086寄存器组可以分为通用寄存器、专用寄存器和段寄存器三类,如图2.3所示。下面分别介绍这些寄存器。 1. 通用寄存器 通用寄存器包括了8个16位的寄存器:AX、BX、CX、DX、SP、BP、DI及SI。其中AX、BX、CX、DX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所...
阅读全文
DirectUI
摘要:DirectUI 概要DirectUIDirectUI是一款强大的界面开发工具,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率。提供所见即所得的开发工具DirectUI Builder。使用DirectUI后将使得我们的设计人员彻底解放,不会受到开发的束缚,可以充分地发挥其设计能力来设计软件界面,并参与到用户界面开发过程中。 DirectUI支持多种开发语言及平台,比如VC,VB,C#,Delphi,C++Builder,PowerBuilder等等。http://www.directui.com/使用DirectUI制作界面可以达到的效果是原始的界面开发技术所不能匹敌的。简单
阅读全文
MultiThread Of Member Functions
摘要:MultiThread Of Member Functions发现使用CreateThread()的方法无法对类地成员函数创建多线程。【例如】//该代码将直接导致程序崩溃://创建线程////////////////////////////////////////////void CMuti_2_ParamentsDlg::OnBnClickedOk(){ DWORD ThreadID; HANDLE hThread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)Add(1, 2), 0, 0, &ThreadID);}//示例函数[
阅读全文
Function Pointer
摘要:/* 函数指针: 即函数的入口地址. [注意] 函数指针不能支持自增++与自减--的操作。*/#include <stdio.h>int sum(int a, int b);int main(){ //函数指针的声明 ////////////////////////////////// int //函数的返回值类型 (*f) //函数指针变量名 (int a, int b) //参数列表 = 0; //初始化 f = sum; //赋值 int n = f(1, 2); //利用函数指针调用函数 return 0;}//示例函数//////////////////...
阅读全文
MultiThread
摘要:MultiThread问题背景例如,一个网络程序,如果你不用多线程,即只使用窗口线程,那么程序在接收到封包之前是阻塞的,那么你的窗口线程就会一直等待接收封包的函数执行完毕,那么你的窗口就像死了一样卡住不动了,用了多线程就不会这样。进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。 线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程.
阅读全文
VC++ 的MFC 和ATL 及COM 是什么?
摘要:一、什么是MFC 微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个输助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal和Dephi的关系一
阅读全文
预编译头文件
摘要:一、预编译头文件使用经验:如果预编译头文件被正确使用时,它确实大大提高我们编程的效率(你工作中,有多少时间是在等编译完成?很多吧,这个时候一般都很无聊,无奈,浪费时间)。但是他太容易用错了. 下面是几种常见的错误用法.1) 在预编译头文件里include自己的头文件(当然, 如果你的头文件不经常变化, 也可以)原因:自己的头文件一般会经常变, 便利后导致预编译的东东重新编译, 降低了编译速度.2) 在其他的头文件里也include 预编译头文件假设你的其他头文件也include了预编译头文件, 如果别人引用你的这个头文件又没有设置成预编译头文件, 那引用你头文件的这个人就煎熬了.原 因:由于你
阅读全文
C库函数中字符串处理函数集合
摘要:C库函数中字符串处理函数集合bcmp原型:extern int bcmp(const void *s1, const void *s2, int n);用法:#include <string.h>功能:比较字符串s1和s2的前n个字节是否相等说明:如果s1=s2或n=0则返回零,否则返回非零值。bcmp不检查NULL。bcopy 原型:extern void bcopy(const void *src, void *dest, int n);用法:#include <string.h> 功能:将字符串src的前n个字节复制到dest中 说明:bcopy不检查字符串中的空
阅读全文