鱼C论坛

 找回密码
 立即注册
查看: 2018|回复: 0

[技术交流] API编程之字体大小,颜色及自定义字体、颜色

[复制链接]
发表于 2015-1-27 01:37:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
  1. #include <Windows.h>
  2. #include <stdio.h>
  3. LRESULT CALLBACK WinHeProc(HWND, UINT, WPARAM, LPARAM);
  4. int WINAPI WinMain(HINSTANCE dyg, HINSTANCE deg, LPSTR mlh, int xs)
  5. {
  6.         WNDCLASS cklx;
  7.         cklx.style = CS_HREDRAW | CS_VREDRAW;
  8.         cklx.cbClsExtra = 0;
  9.         cklx.cbWndExtra = 0;
  10.         cklx.hbrBackground = (HBRUSH)(GetStockObject(DEFAULT_PALETTE));
  11.         cklx.hCursor = LoadCursor(NULL, IDC_APPSTARTING);
  12.         cklx.hIcon = LoadIcon(NULL, IDI_HAND);
  13.         cklx.hInstance = dyg;
  14.         cklx.lpfnWndProc = WinHeProc;
  15.         cklx.lpszClassName = "dygcx";
  16.         cklx.lpszMenuName = NULL;
  17.         if (!RegisterClass(&cklx))
  18.         {
  19.                 MessageBeep(0);
  20.                 return false;
  21.         }
  22.         HWND ckjbA;
  23.         ckjbA= CreateWindow("dygcx", "第一个程序", WS_OVERLAPPEDWINDOW, NULL, NULL, 600, 400, NULL, NULL, dyg, NULL);
  24.         if (!ckjbA)
  25.         {
  26.                 MessageBox(NULL, "创建窗口失败!", "错误", NULL);
  27.                 return false;
  28.         }
  29.         ShowWindow(ckjbA, SW_SHOWNORMAL);
  30.         UpdateWindow(ckjbA);
  31.         MSG msg;
  32.         while (GetMessage(&msg,NULL,0,0))
  33.         {
  34.                 TranslateMessage(&msg);
  35.                 DispatchMessage(&msg);
  36.         }
  37.         return msg.wParam;
  38. }
  39. LRESULT CALLBACK WinHeProc(HWND ckjb, UINT umsg, WPARAM cdcs, LPARAM cscs)
  40. {
  41.         TCHAR zf[222];
  42.         HDC ht;
  43.         PAINTSTRUCT tu;
  44.         TEXTMETRIC tm;//存放字体相关信息
  45.         LOGFONT lf = { 0 };//自定字体
  46.         CHOOSEFONT cf = { 0 };//初始化字体框
  47.         CHOOSECOLOR cc = { 0 };//自定颜色
  48.         COLORREF crf[16] = { 0 };//初始化自定义颜色
  49.         /*BOOL ChooseFont(LPCHOOSEFONT lpcf)
  50.         typedef struct{   
  51.                 DWORD lStructSize;  //结构体大小
  52.                 LPLOGFONT lpLogFont;//字体信息       
  53.                 DWORD Flags;//CF_SCREENFONTS在屏幕上显示;CF_EFFECT显示下划线,
  54.                 字体颜色,删除线功能;CF_INITTOLOGFONTSTRUCT用lpLogFont初始化选择框
  55.         。。。。。。
  56.         }    CHOOSEFONT, *LPCHOOSEFONT                        */
  57.        
  58.         /*BOOL ChooseColor(LPCHOOSECOLOR lpcc)
  59.         typedef struct{
  60.         DWORD lStructSize;  //结构体大小
  61.         COLORREF refResult;//颜色值
  62.         COLORREF * lpCustColors;//自定义颜色值储存位置
  63.         DWORD Flags;//CC_FULLOPEN显示选择框;CC_RGBINIT用rgbResult值初始化选择框
  64.         。。。。。。
  65.         }    CHOOSECOLOR, *LPCHOOSECOLOR                        */
  66.         switch (umsg)
  67.         {
  68.         case WM_SIZE:
  69.                 sprintf(zf, "宽度:%d,高度:%d", LOWORD(cscs), HIWORD(cscs));
  70.                 MessageBox(NULL, zf, "大小", 0);
  71.                 break;
  72.         case WM_CREATE:
  73.                 MessageBox(ckjb, "创建完毕", "成功", 0);
  74.                 break;
  75.         case WM_PAINT:

  76.                 ht = BeginPaint(ckjb, &tu);
  77.                 GetTextMetrics(ht, &tm);//取得字体大小
  78.                 for (int i = 0; i < 5; i++)
  79.                 {
  80.                         TextOut(ht, 0, tm.tmHeight *i, "我的程序!", strlen("我的程序!"));
  81.                 }
  82.                 //SetBkMode(hdc,OPAQUB)文字背景模式不透明
  83.                 //SetBkMode(hdc,TRANSPARENT)文字背景模式透明
  84.                 SetTextColor(ht, RGB(255, 222, 22));//设置字体颜色  
  85.                 SetBkColor(ht, RGB(1, 222, 22));//设置字体背景颜色
  86.                 SelectObject(ht, GetStockObject(ANSI_VAR_FONT));//取得字体形式
  87.                 TextOut(ht, 0, 300, "我的程序!", strlen("我的程序!"));
  88.                 SelectObject(ht, GetStockObject(ANSI_FIXED_FONT));//取得字体形式
  89.                 TextOut(ht, 0, 300 + tm.tmHeight, "我的程序!", strlen("我的程序!"));
  90.                 lf.lfHeight = 30;//自定字体的高度
  91.                 lf.lfUnderline = 2;//自定带下划线的字体
  92.                 SelectObject(ht, CreateFontIndirect(&lf));//选择创建的自定义字体
  93.                 TextOut(ht, 121, 3 + tm.tmHeight, "我的程序!", strlen("我的程序!"));
  94.                 EndPaint(ckjb, &tu);
  95.                 break;
  96.         case WM_CHAR:
  97.                 sprintf(zf, "按下了%c键", cdcs);
  98.                 MessageBox(ckjb, zf, "键盘消息", 0);
  99.                 break;
  100.         case WM_LBUTTONDOWN:
  101.                 cc.lStructSize = sizeof(CHOOSECOLOR);
  102.                 cc.lpCustColors = crf;
  103.                 cc.Flags = CC_FULLOPEN;
  104.                 crf[0] = RGB(255, 0, 9);
  105.                 ht = GetDC(ckjb);
  106.                 ChooseColor(&cc);
  107.                 SetBkColor(ht, cc.rgbResult);
  108.                 TextOut(ht, 131, 111, "我的程序!", strlen("我的程序!"));
  109.                 ReleaseDC(ckjb, ht);
  110.                 cf.lStructSize = sizeof(CHOOSEFONT);                                                                              //字
  111.                 cf.lpLogFont = &lf;                                                                                         
  112.                 cf.Flags = CF_SCREENFONTS | CF_EFFECTS;                                                                       //体
  113.                 ChooseFont(&cf);                                                                       
  114.                 ht = GetDC(ckjb);                       
  115.                 SetTextColor(ht, RGB(255, 222, 22));  //设置字体颜色                                                        //选
  116.                 SetBkColor(ht, RGB(1, 222, 22));  //设置字体背景颜色                          
  117.                 SelectObject(ht, CreateFontIndirect(cf.lpLogFont));                                                        //择
  118.                 TextOut(ht, 131, 88, "我的程序!", strlen("我的程序!"));
  119.                 ReleaseDC(ckjb, ht);                                                                                                                                          //框
  120.                 MessageBox(ckjb, "鼠标左键按下了。。。。", "鼠标消息", 0);
  121.                 break;
  122.         case WM_RBUTTONDOWN:
  123.                 MessageBox(ckjb, "鼠标右键按下了。。。。", "鼠标消息", 0);
  124.                 break;
  125.         case WM_CLOSE:
  126.                 if (IDYES == MessageBox(ckjb, "是否退出程序?", "退出程序", MB_YESNO))
  127.                 {
  128.                         DestroyWindow(ckjb);
  129.                 }
  130.                 break;
  131.         case WM_DESTROY:
  132.                 PostQuitMessage(0);
  133.                 break;
  134.         default:
  135.                 return DefWindowProc(ckjb, umsg, cdcs, cscs);
  136.                 break;
  137.         }
  138.         return 0;
  139. }
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 23:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表