winform下拉框篇.类似Word的颜色下拉框

本文介绍如何在WinForm应用中实现一个类似Word的颜色下拉框,包括弹出色彩选择对话框、保持后台窗口焦点及点击更多调用Windows标准颜色选取对话框。通过自定义基类NoActForm和ColorSelectForm,利用Windows API实现特定效果,如防止窗口失去焦点。详细代码解析了实现过程。
摘要由CSDN通过智能技术生成

实现功能:

1)下拉出颜色选取对话框.

2)后台窗口不失去焦点.

3)点击更多调用windows标准颜色选取对话框选取颜色.



开发背景:

在网上看到一些文章可以基本实现这些功能、但是大多使用前台窗口获得焦点后在迅速把焦点

转移到后台窗口的方法、或是将前台窗口 Show 出通过使去焦点来关闭前台窗口,或者干脆用个控件(用普通的控件如果如果范围超出后台窗口的范围就会被窗口遮挡)

而Windows内置的菜单或下拉框都不会出现使、前台窗口触发失去焦点事件的事件、更不会被遮挡、抱着一个程序员执著的信念、在csdn论坛连发数贴(400 分啊)在加上不断的努力终于有所曾就。

在此感谢 csdn 的各位同僚朋友,没有你们就没有这个世界(哈)。

废话不多说了、进入正题。



程序实现代码解析:

1)文章所用到的基础Windows API 类。

using System;

using System.Runtime.InteropServices;

/// <summary>

/// 系统调用,都是Windows API 相关 注视的地方也许大家有用没有删除,具体说明情察看msdn

/// </summary>

public class SystemShell

{



public const int GWL_STYLE = -16;

//public const int GWL_EXSTYLE = -20;

//public const int WS_VISIBLE =0x10000000;

public const int WS_CHILDWINDOW = 0x40000000;

//public const int WS_CLIPSIBLINGS = 0x04000000;

//public const int WS_CLIPCHILDREN = 0x02000000;

//public const int WS_BORDER = 0x00800000;

//public const long WS_THICKFRAME = 0x00040000;

//public const long WS_OVERLAPPED = 0x00000000;

//public const long WS_DLGFRAME = 0x00400000;

//public const long WS_EX_TOOLWINDOW = 0x00000080;



//public const int WM_NCPAINT = 0x0085;

public const int WM_ACTIVATEAPP = 0x001C;

//public const int WM_ERASEBKGND = 0x0014;



[DllImport("user32.dll", CharSet=CharSet.Auto)]

public static extern long SetWindowLong(IntPtr hWnd, int nIndex, long dwNewLong);



[DllImport("user32.dll", CharSet=CharSet.Auto)]

public static extern long GetWindowLong( IntPtr hWnd,int nIndex);





//[DllImport("user32.dll", CharSet=CharSet.Auto)]

//public static extern int SendMessage(IntPtr hWnd , int msg , int wParam ,int lParam );



//[DllImport("user32.dll", CharSet=CharSet.Auto)]

//public static extern int GetWindowRect (IntPtr hWnd , ref System.Drawing.Rectangle lpRect);



private SystemShell()

{

//

// TODO: 在此处添加构造函数逻辑

//

}

}







本文章弹出窗口的基类(代码处理流程情根据标号浏览)







/// <summary>

/// NoActForm 实现弹出窗口的基类。

/// </summary>

public class NoActForm : System.Windows.Forms.Form

{



/// <summary>

/// 必需的设计器变量。

///

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值