windows程序设计 之 「COLORS3.C 」范例分析笔记

/*----------------------------------------------
   COLORS3.C -- Version using Common Dialog Box
                (c) Charles Petzold, 1998
  ----------------------------------------------*/


#include <windows.h>
#include <commdlg.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static CHOOSECOLOR cc ;


     /*COLORREF类型用来描绘一个RGB颜色.
        结构体类似于: RGB_value struct
                       { byte unused ;
                          byte blue ;
                          byte green ;
                          byte red;    };
       其中第一字节始终为 0,其它三个字节分别表示兰色、绿色和红色,刚好和 RGB 的次序相反。
       COLORREF类型变量值描绘一个颜色时对应于16进制的格式: 0x00bbggrr
       从COLORREF中获取RGB分量值:
       BYTE r = GetRValue(colorrrefRGB);
       BYTE g = GetGValue(colorrrefRGB);
       BYTE b = GetBValue(colorrrefRGB); */

     static COLORREF    crCustColors[16] ;

     cc.lStructSize         = sizeof (CHOOSECOLOR) ;    //结构大小
     cc.hwndOwner      = NULL ;                                 //对话框拥有者的窗口句柄
     cc.hInstance          = NULL ;                                 //自定义对话框模板资源载入内存后的句柄
     /* 如果CC_RGBINT标识符被设置时,该成员指定了对话框打开时默认的选择颜色.
        如果用户单击OK按钮,该成员指定了用户选择的颜色.*/

     cc.rgbResult           = RGB (0x80, 0x80, 0x80) ;
     /* 指向一个包含16个值的数组,该数组包含了对话框中自定义颜色的红、绿、蓝(RGB)值。*/
     cc.lpCustColors      = crCustColors ;
     /* CC_RGBINIT: 让对话框默认使用由rgbResult成员指定的颜色
        CC_FULLOPEN: 让对话框显示额外的控件以使用户创建自定义的颜色。
                                 如果该标识未设置,用户必须点击[自定义颜色]按钮才能显示自定颜色控件。*/

     cc.Flags                  = CC_RGBINIT | CC_FULLOPEN ;
     cc.lCustData           = 0 ;                                      //自定义程序数据
     cc.lpfnHook             = NULL ;                                //指向一个钩子程序
     /* 指向一个以空字符结束的字符串,字符串是对话框模板资源的名字,资源保存在能被hInstance成员识别的模块中 */
     cc.lpTemplateName = NULL ;

     /* 创建一个能使用户从中选择颜色的Color模态通用对话框。
         如果用户点击对话框中的OK按钮,返回值为非零值。
         CHOOSECOLOR结构中的rgbResult成员含有用户选择的颜色的RGB颜色值。
         如果用户取消或关闭Color对话框或错误出现,返回值为零。
         Color对话框不支持彩色调色板,对话框提供的颜色的选择仅限于系统颜色和这些颜色的混合值。 */

     return ChooseColor (&cc) ;
}


CHOOSECOLOR Structure

该结构包含了ChooseColor函数用于初始化颜色对话框的信息。在用户关闭对话框之后,系统返回关于用户选择的颜色信息。

语法

typedef struct {
                         DWORD lStructSize;
                         HWND hwndOwner;
                         HWND hInstance;
                         COLORREF rgbResult;
                         COLORREF *lpCustColors;
                         DWORD Flags;
                         LPARAM lCustData;
                         LPCCHOOKPROC lpfnHook;
                         LPCTSTR lpTemplateName;
} CHOOSECOLOR, *LPCHOOSECOLOR;


成员

lStructSize

指定结构的长度(字节)

hwndOwner

拥有对话框的窗口的句柄。该成员可以是任意有效的窗口句柄,或在对话框没有所有者时,可为NULL

hInstance

如果Flag成员设置了 CC_ENABLETEMPLATEHANDLE 标识符时,该成员是一个包含了对话框模板的内存对象的句柄。

如果 CC_ENABLETEMPLATE 标识符被设置时,该成员是一个包含了对话框的模块句柄。

如果上述两个标识符都未被设置,则该成员被忽略。

rgbResult

如果CC_RGBINT 标识符被设置时,该成员指定了对话框打开时默认的选择颜色。如果指定的颜色值不在有效的范围内,系统会自动选择最近的颜色值。如果该成员为0或CC_RGBINT 未被设置,初始颜色是黑色。如果用户单击OK按钮,该成员指定了用户选择的颜色。

lpCustColors

指向一个包含16个值的数组,该数组包含了对话框中自定义颜色的红、绿、蓝(RGB)值。如果用户修改这些颜色,系统将用新的颜色值更新这个数组。如果要在多个ChooseColor函数中保存这个新的数组,你应该为该数组分配静态内存空间

Flags

一个可以让你初始化颜色对话框的位集。当对话框返回时,它用来这些标识符来标识用户的输入。该成员可以为下列标识符的任意组合。

CC_ANYCOLOR

对话框显示所有可用的基于基本颜色的颜色。

CC_ENABLEHOOK

激活由lpfnHook成员指定的钩子程序。该标识仅用于初始化对话框时。

CC_ENABLETEMPLATE

表示利用由hInstance 和 lpTemplateName 成员指定的对话框模板。该标识符仅用于初始化对话框。

CC_ENABLETEMPLATEHANDLE

表示hInstance成员标识一个包含了预加载的对话框模板的数据块。如果该标识被指定,系统会忽略 lpTemplateName 成员。该标识符仅用于初始化对话框。

CC_FULLOPEN

让对话框显示额外的控件以使用户创建自定义的颜色。如果该标识未设置,用户必须点击【自定义颜色】按钮才能显示自定颜色控件。

CC_PREVENTFULLOPEN

使自定义颜色按钮失效。

CC_RGBINIT

让对话框默认使用由rgbResult成员指定的颜色

CC_SHOWHELP

让对话框显示帮助按钮。

hwndOwner成员必须指定一个窗口,这个窗口接收对话框发送的HELPMSGSTRING注册的消息。

当用户单击帮助按钮时对话框发送这个消息。

CC_SOLIDCOLOR

让对话框仅显示基本颜色组成的纯色。

lCustData

指定应用程序自定义的数据,该数据会被系统发送给钩子程序。当系统发送WM_INITDIALOG消息给钩子程序时,消息的lParam参数是一个指向CHOOSECOLOR结构的指针。钩子程序可以利用该指针获得该成员的值。

lpfnHook

指向CCHookProc钩子程序的指针,该钩子可以处理发送给对话框的消息。该成员只在CC_ENABLEHOOK标识被设定的情况下才可用,否则该成员会被忽略。

lpTemplateName

指向一个NULL结尾的字符串,该字符串是对话框模板资源的名字。

结构信息

Header    Declared in Commdlg.h, include Windows.h
Minimum operating systems    Windows 95, Windows NT 3.1
Unicode    Implemented as ANSI and Unicode versions.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值