win32 c语言字体示例

[复制链接]
发表于 2025-10-23 06:17:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. #include<windows.h>
  2. #include<stdio.h>
  3. typedef struct _MYDC{
  4.     HDC dc1,dc2;
  5.     HBITMAP map;
  6.     DWORD *buf;
  7.     int x,y,w,h,num,size;
  8. }MYDC;
  9. void mydc_init(MYDC*mydc,HWND win,int x,int y,int w,int h){
  10.     mydc->x=x;
  11.     mydc->y=y;
  12.     mydc->w=w;
  13.     mydc->h=h;
  14.     mydc->num=w*h;
  15.     mydc->size=mydc->num*4;
  16.     mydc->dc1=GetDC(win);
  17.     mydc->dc2=CreateCompatibleDC(mydc->dc1);
  18.     mydc->map=CreateCompatibleBitmap(mydc->dc1,mydc->w,mydc->h);
  19.     SelectObject(mydc->dc2,mydc->map);
  20.     mydc->buf=(DWORD*)malloc(mydc->size);
  21. }
  22. void mydc_clear(MYDC*p,DWORD clorr){
  23.     for(int i=0;i<p->num;i++){
  24.         p->buf[i]=clorr;
  25.     }
  26. }
  27. void mydc_sendbuf(MYDC*p){
  28.     SetBitmapBits(p->map,p->size,p->buf);
  29. }
  30. void mydc_bitblt(MYDC*p){
  31.     BitBlt(p->dc1,p->x,p->y,p->w,p->h,p->dc2,0,0,SRCCOPY);
  32. }
  33. void mydc_setpixle(MYDC*p,int x,int y,DWORD color){
  34.     if(x<0||y<0||x>=p->w||y>=p->h){
  35.         return;
  36.     }
  37.     int off=x+y*p->w;
  38.     p->buf[off]=color;
  39. }
  40. void mydc_textout(MYDC*p,char*s,int x,int y,DWORD color){
  41.     //转换BGR为RGB
  42.     DWORD color2=0;
  43.     ((BYTE*)&color2)[0]= ((BYTE*)&color)[2];
  44.     ((BYTE*)&color2)[2]= ((BYTE*)&color)[0];
  45.     int len=strlen(s);
  46.     SetTextColor(p->dc2,color2);
  47.     SetBkMode(p->dc2,TRANSPARENT);
  48.     TextOutA(p->dc2,x,y,s,len);
  49. }
  50. void mydc_setfont(MYDC*p,HFONT font){
  51.     SelectObject(p->dc2,font);
  52. }
  53. HFONT CreateMyFont(char*zt,int h){
  54.     return CreateFontA(h,0,0,0,0,0,0,0,DEFAULT_CHARSET,0,0,0,0,zt);
  55. }
  56. MYDC d;
  57. int main(){
  58.     mydc_init(&d,0,0,0,700,700);
  59.     //字体逐步变大
  60.     for(int i=0;i<40;i++){
  61.         //此时是在缓冲区clear
  62.         mydc_clear(&d,0x00ffff);
  63.         //此时setbitmap 但是还没有bitblt
  64.         mydc_sendbuf(&d);
  65.         HFONT font=CreateMyFont("新宋体",(i+1)*5);
  66.         mydc_setfont(&d,font);
  67.         //这里也只是写入bitmap
  68.         mydc_textout(&d,"你好哇 222",20,40,0xff0000);
  69.         //这里bitblt了刷新到缓冲区  clear 和 textout先后向bitmap写入数据后才刷入缓冲区
  70.         mydc_bitblt(&d);
  71.         Sleep(50);
  72.     }
  73.    
  74. }
复制代码
编译  gcc  a.c  -lgdi32
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表