鱼C论坛

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

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

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

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

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

x
#include <Windows.h>
#include <stdio.h>
LRESULT CALLBACK WinHeProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE dyg, HINSTANCE deg, LPSTR mlh, int xs)
{
        WNDCLASS cklx;
        cklx.style = CS_HREDRAW | CS_VREDRAW;
        cklx.cbClsExtra = 0;
        cklx.cbWndExtra = 0;
        cklx.hbrBackground = (HBRUSH)(GetStockObject(DEFAULT_PALETTE));
        cklx.hCursor = LoadCursor(NULL, IDC_APPSTARTING);
        cklx.hIcon = LoadIcon(NULL, IDI_HAND);
        cklx.hInstance = dyg;
        cklx.lpfnWndProc = WinHeProc;
        cklx.lpszClassName = "dygcx";
        cklx.lpszMenuName = NULL;
        if (!RegisterClass(&cklx))
        {
                MessageBeep(0);
                return false;
        }
        HWND ckjbA;
        ckjbA= CreateWindow("dygcx", "第一个程序", WS_OVERLAPPEDWINDOW, NULL, NULL, 600, 400, NULL, NULL, dyg, NULL);
        if (!ckjbA)
        {
                MessageBox(NULL, "创建窗口失败!", "错误", NULL);
                return false;
        }
        ShowWindow(ckjbA, SW_SHOWNORMAL);
        UpdateWindow(ckjbA);
        MSG msg;
        while (GetMessage(&msg,NULL,0,0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        return msg.wParam;
}
LRESULT CALLBACK WinHeProc(HWND ckjb, UINT umsg, WPARAM cdcs, LPARAM cscs)
{
        TCHAR zf[222];
        HDC ht;
        PAINTSTRUCT tu;
        TEXTMETRIC tm;//存放字体相关信息
        LOGFONT lf = { 0 };//自定字体
        CHOOSEFONT cf = { 0 };//初始化字体框
        CHOOSECOLOR cc = { 0 };//自定颜色
        COLORREF crf[16] = { 0 };//初始化自定义颜色
        /*BOOL ChooseFont(LPCHOOSEFONT lpcf)
        typedef struct{    
                DWORD lStructSize;  //结构体大小
                LPLOGFONT lpLogFont;//字体信息        
                DWORD Flags;//CF_SCREENFONTS在屏幕上显示;CF_EFFECT显示下划线,
                字体颜色,删除线功能;CF_INITTOLOGFONTSTRUCT用lpLogFont初始化选择框
        。。。。。。
        }    CHOOSEFONT, *LPCHOOSEFONT                        */
        
        /*BOOL ChooseColor(LPCHOOSECOLOR lpcc)
        typedef struct{
        DWORD lStructSize;  //结构体大小
        COLORREF refResult;//颜色值
        COLORREF * lpCustColors;//自定义颜色值储存位置
        DWORD Flags;//CC_FULLOPEN显示选择框;CC_RGBINIT用rgbResult值初始化选择框
        。。。。。。
        }    CHOOSECOLOR, *LPCHOOSECOLOR                        */
        switch (umsg)
        {
        case WM_SIZE:
                sprintf(zf, "宽度:%d,高度:%d", LOWORD(cscs), HIWORD(cscs));
                MessageBox(NULL, zf, "大小", 0);
                break;
        case WM_CREATE:
                MessageBox(ckjb, "创建完毕", "成功", 0);
                break;
        case WM_PAINT:

                ht = BeginPaint(ckjb, &tu);
                GetTextMetrics(ht, &tm);//取得字体大小
                for (int i = 0; i < 5; i++)
                {
                        TextOut(ht, 0, tm.tmHeight *i, "我的程序!", strlen("我的程序!"));
                }
                //SetBkMode(hdc,OPAQUB)文字背景模式不透明
                //SetBkMode(hdc,TRANSPARENT)文字背景模式透明
                SetTextColor(ht, RGB(255, 222, 22));//设置字体颜色  
                SetBkColor(ht, RGB(1, 222, 22));//设置字体背景颜色
                SelectObject(ht, GetStockObject(ANSI_VAR_FONT));//取得字体形式
                TextOut(ht, 0, 300, "我的程序!", strlen("我的程序!"));
                SelectObject(ht, GetStockObject(ANSI_FIXED_FONT));//取得字体形式
                TextOut(ht, 0, 300 + tm.tmHeight, "我的程序!", strlen("我的程序!"));
                lf.lfHeight = 30;//自定字体的高度
                lf.lfUnderline = 2;//自定带下划线的字体
                SelectObject(ht, CreateFontIndirect(&lf));//选择创建的自定义字体
                TextOut(ht, 121, 3 + tm.tmHeight, "我的程序!", strlen("我的程序!"));
                EndPaint(ckjb, &tu);
                break;
        case WM_CHAR:
                sprintf(zf, "按下了%c键", cdcs);
                MessageBox(ckjb, zf, "键盘消息", 0);
                break;
        case WM_LBUTTONDOWN:
                cc.lStructSize = sizeof(CHOOSECOLOR);
                cc.lpCustColors = crf;
                cc.Flags = CC_FULLOPEN;
                crf[0] = RGB(255, 0, 9);
                ht = GetDC(ckjb);
                ChooseColor(&cc);
                SetBkColor(ht, cc.rgbResult);
                TextOut(ht, 131, 111, "我的程序!", strlen("我的程序!"));
                ReleaseDC(ckjb, ht);
                cf.lStructSize = sizeof(CHOOSEFONT);                                                                              //字
                cf.lpLogFont = &lf;                                                                                         
                cf.Flags = CF_SCREENFONTS | CF_EFFECTS;                                                                       //体
                ChooseFont(&cf);                                                                        
                ht = GetDC(ckjb);                        
                SetTextColor(ht, RGB(255, 222, 22));  //设置字体颜色                                                        //选
                SetBkColor(ht, RGB(1, 222, 22));  //设置字体背景颜色                          
                SelectObject(ht, CreateFontIndirect(cf.lpLogFont));                                                        //择
                TextOut(ht, 131, 88, "我的程序!", strlen("我的程序!"));
                ReleaseDC(ckjb, ht);                                                                                                                                          //框
                MessageBox(ckjb, "鼠标左键按下了。。。。", "鼠标消息", 0);
                break;
        case WM_RBUTTONDOWN:
                MessageBox(ckjb, "鼠标右键按下了。。。。", "鼠标消息", 0);
                break;
        case WM_CLOSE:
                if (IDYES == MessageBox(ckjb, "是否退出程序?", "退出程序", MB_YESNO))
                {
                        DestroyWindow(ckjb);
                }
                break;
        case WM_DESTROY:
                PostQuitMessage(0);
                break;
        default:
                return DefWindowProc(ckjb, umsg, cdcs, cscs);
                break;
        }
        return 0;
}

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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