zoukankan      html  css  js  c++  java
  • VC调用系统的调色板

      调用系统的调色板可以用到ChooseColor这个函数,这个函数传入一个参数为CHOOSECOLOR结构体的指针,其函数原型为

    1 BOOL ChooseColor(LPCHOOSECOLOR lpCC);

      我们最重要的是需要了解CHOOSECOLOR结构体的成员,下面详细分析CHOOSECOLOR的成员。

      CHOOSECOLOR结构体的定义如下:

     1 typedef struct {
     2 DWORD lStructSize;
     3 HWND hwndOwner;
     4 HWND hInstance;
     5 COLORREF rgbColors;
     6 COLORREF *lpCustColors;
     7 DWORD Flags;
     8 LPARAM lCustData;
     9 LPCCHOOKPROC lpfnHook;
    10 LPCTSTR lpTemplateName;
    11 } CHOOSECOLOR, *LPCHOOSECOLOR;

      成员:

      lStructSize

      指定CHOOSECOLOR结构体的长度(字节)。

      hwndOwner

      父窗口的窗口句柄。当没有父窗口时,赋值为NULL。

      hInstance

      如果Flag成员设置了CC_ENABLETEMPLATEHANDLE标识符时,该成员是一个包含了对话框模板的内存对象的句柄。如果 CC_ENABLETEMPLATE 标识符被设置时,该成员是一个包含了对话框的模块句柄。如果上述两个标识符都未被设置,则该成员被忽略。

      rgbColors

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

      lpCustColors

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

      Flags

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

    Flags Meaning
    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结尾的字符串,该字符串是对话框模板资源的名字。

      

      上面对CHOOSECOLOR结构体进行了详细的分析,下面举个小例子,说明如何调用系统的调色板。

      

     1 CHOOSECOLOR cc;
     2 COLORREF crCustColors[16];
     3 ZeroMemory(&cc, sizeof(cc));
     4 cc.lStructSize = sizeof(cc);
     5 cc.hwndOwner = m_hWnd;
     6 cc.rgbResult = 0xFFFFFF;
     7 cc.Flags = CC_FULLOPEN|CC_RGBINIT;
     8 cc.lCustData = 0;
     9 cc.lpfnHook = NULL;
    10 cc.hInstance = NULL;
    11 cc.lpCustColors = crCustColors;
    12 cc.lpTemplateName = NULL;
    13 if (ChooseColor(&cc))
    14 //在用户关闭对话框之后,系统返回关于用户选择的颜色信息。
    15 {
    16     //下面的位运算主要是因为获得的颜色值红蓝颜色值被调换
    17     int nR = GetRValue(cc.rgbResult);
    18     int nB = GetBValue(cc.rgbResult);
    19 
    20     cc.rgbResult &= 0x00ffff;
    21     cc.rgbResult |= (nR<<16);
    22 
    23     cc.rgbResult &= 0xffff00;
    24     cc.rgbResult |= (nB);
    25 }

      

  • 相关阅读:
    实现 (5).add(3).minus(2) 功能
    vue兄弟组件传值的三种方法
    Web渗透测试思路整理
    PHP代码审计基础
    简单易用,用Powershell劫持Windows系统快捷键
    javascript脚本混淆
    秒杀系统架构优化思路
    什么是OOP
    一分钟了解负载均衡的一切
    MVC
  • 原文地址:https://www.cnblogs.com/jinsedemaitian/p/3238677.html
Copyright © 2011-2022 走看看