马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- #include<windows.h>
- #include<stdio.h>
- typedef struct _MYDC{
- HDC dc1,dc2;
- HBITMAP map;
- DWORD *buf;
- int x,y,w,h,num,size;
- }MYDC;
- void mydc_init(MYDC*mydc,HWND win,int x,int y,int w,int h){
- mydc->x=x;
- mydc->y=y;
- mydc->w=w;
- mydc->h=h;
- mydc->num=w*h;
- mydc->size=mydc->num*4;
- mydc->dc1=GetDC(win);
- mydc->dc2=CreateCompatibleDC(mydc->dc1);
- mydc->map=CreateCompatibleBitmap(mydc->dc1,mydc->w,mydc->h);
- SelectObject(mydc->dc2,mydc->map);
- mydc->buf=(DWORD*)malloc(mydc->size);
- }
- void mydc_clear(MYDC*p,DWORD clorr){
- for(int i=0;i<p->num;i++){
- p->buf[i]=clorr;
- }
- }
- void mydc_sendbuf(MYDC*p){
- SetBitmapBits(p->map,p->size,p->buf);
- }
- void mydc_bitblt(MYDC*p){
- BitBlt(p->dc1,p->x,p->y,p->w,p->h,p->dc2,0,0,SRCCOPY);
- }
- void mydc_setpixle(MYDC*p,int x,int y,DWORD color){
- if(x<0||y<0||x>=p->w||y>=p->h){
- return;
- }
- int off=x+y*p->w;
- p->buf[off]=color;
- }
- void mydc_textout(MYDC*p,char*s,int x,int y,DWORD color){
- //转换BGR为RGB
- DWORD color2=0;
- ((BYTE*)&color2)[0]= ((BYTE*)&color)[2];
- ((BYTE*)&color2)[2]= ((BYTE*)&color)[0];
- int len=strlen(s);
- SetTextColor(p->dc2,color2);
- SetBkMode(p->dc2,TRANSPARENT);
- TextOutA(p->dc2,x,y,s,len);
- }
- void mydc_setfont(MYDC*p,HFONT font){
- SelectObject(p->dc2,font);
- }
- HFONT CreateMyFont(char*zt,int h){
- return CreateFontA(h,0,0,0,0,0,0,0,DEFAULT_CHARSET,0,0,0,0,zt);
- }
- MYDC d;
- int main(){
- mydc_init(&d,0,0,0,700,700);
- //字体逐步变大
- for(int i=0;i<40;i++){
- //此时是在缓冲区clear
- mydc_clear(&d,0x00ffff);
- //此时setbitmap 但是还没有bitblt
- mydc_sendbuf(&d);
- HFONT font=CreateMyFont("新宋体",(i+1)*5);
- mydc_setfont(&d,font);
- //这里也只是写入bitmap
- mydc_textout(&d,"你好哇 222",20,40,0xff0000);
- //这里bitblt了刷新到缓冲区 clear 和 textout先后向bitmap写入数据后才刷入缓冲区
- mydc_bitblt(&d);
- Sleep(50);
- }
-
- }
复制代码 编译 gcc a.c -lgdi32
|