dc操作示例代码



掌叔
2009-02-19 20:20:37

摘自:[url]http://iava.5d6d.com[/url]
作者:ygliu_richway[code]typedef struct
{
char *filep;
int width,height;
int keycolor;
}TestArray;
TestArray bitblt[]={{"IavaResource/picture/BitBlt.bmp",128,128}};
//最好再加个各个模式的环境设定
void DCTest_BitBlt()
//void WinMain()
{
HDC DCScreen;
HDC dcc;
int xd,yd,xs,ys,w,h;
int i,j;
eDRAW mode;
//DRAW_NOT可以和其他混用
eDRAW mode0[]={DRAW_COPY,DRAW_XOR,DRAW_AND,DRAW_OR,DRAW_SPRITE,DRAW_NOT};
eDRAW mode1=DRAW_NOT;

DCScreen=GetScreenDC();
SetBgColor(DCScreen,RGB(64,179,116));

publicPrintf("BitBlt测试开始
");
for(i=0;i {
dcc=CreateDC(bitblt.width,bitblt.height);
w=bitblt.width,h=bitblt.height;
LoadBmp(dcc, 0, 0, w, h, bitblt.filep, 0, 0,0);
for(j=0;j {
mode=mode0[j];

switch(mode&~DRAW_NOT)
{
case DRAW_COPY:
SetBgColor(DCScreen,0xffffff);
break;
case DRAW_XOR:
SetBgColor(DCScreen,0xffffff);
break;
case DRAW_AND:
SetBgColor(DCScreen,0xffffff);
break;
case DRAW_OR:
SetBgColor(DCScreen,0x0);
break;
case DRAW_SPRITE:
SetBgColor(DCScreen,0xffffff);
SetKeyColor(dcc,0x0);
break;
case DRAW_NOT:
SetBgColor(DCScreen,0xffffff);
break;
}
xxx:
//测试部分
//xd,yd
ClearArea(DCScreen);
xs=ys=0;
xd=-w-w/2;
yd=-h-h/2;
while(1)
{
BitBlt(DCScreen,xd,yd,w,h,dcc,xs,ys,mode);
xd+=w;
if(xd>WIDTH+w+w/2)//保证有图片在边界外
{
xd=-w-w/2;
yd+=h;
if(yd>HEIGHT+h+h/2)
{
break;
}
}
}
exitkey=GetKey();
if(exitkey==VKEY_RSK)
{
exit(0);
}
UpdateArea(DCScreen);
CapTime(500);

//xs,ys
ClearArea(DCScreen);
w=bitblt.width,h=bitblt.height;
xd=0,yd=0;
xs=-w-w/2,ys=-h-h/2;
while(xs<(w>h?w:h)+w)
{
BitBlt(DCScreen,xd,yd,w,h,dcc,xs,ys,mode);
//UpdateArea(DCScreen);
xs+=w/8;
ys+=h/8;
xd+=w;
if(xd>WIDTH+w)
{
xd=0;
yd+=h;
if(yd>HEIGHT+h)
{
yd=0;
exitkey=GetKey();
if(exitkey==VKEY_RSK)
{
exit(0);
}
UpdateArea(DCScreen);
ClearArea(DCScreen);
////////////////////////////////////////////////////////////////////////////////////
CapTime(500);
}
}
}
exitkey=GetKey();
if(exitkey==VKEY_RSK)
{
exit(0);
}
UpdateArea(DCScreen);
////////////////////////////////////////////////////////////////////////////////////
CapTime(2000);


//w,h
ClearArea(DCScreen);
xs=ys=0;
w=bitblt.width,h=bitblt.height;
xd=yd=0;
w=-w,h=-h;
while(w {
BitBlt(DCScreen,xd,yd,w,h,dcc,xs,ys,mode);
xd+=bitblt.width;
if(xd>WIDTH)
{
xd=0;
yd+=bitblt.height;
if(yd>HEIGHT)
{
yd=0;
exitkey=GetKey();
if(exitkey==VKEY_RSK)
{
exit(0);
}
UpdateArea(DCScreen);
////////////////////////////////////////////////////////////////
CapTime(500);
ClearArea(DCScreen);
}
}
w+=bitblt.width/16;
h+=bitblt.height/16;
}
exitkey=GetKey();
if(exitkey==VKEY_RSK)
{
exit(0);
}
UpdateArea(DCScreen);
///////////////////////////////////////////////////////////////
CapTime(1000);

//DRAW_NOT和其他混用
if(mode&mode1)
{
continue;
}
else
{
mode=mode0[j]|mode1;
goto xxx;
}
}
CloseHandle(dcc);
}
publicPrintf("BitBlt测试结束
");
}[/code]


唯一
2009-06-24 19:42:22

嗨!运行不了!


forgetmenot
2010-09-01 11:37:56

转过来的啵,貌似~,如果有编写,便携设备的一系列的api等的就好了~定义文档什么的,不过感觉不可能,很多是收费使用的呢~