`
huanghuaibin
  • 浏览: 68804 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

C#操作API相关文档,使用API选择TreeView节点,使用API控制TreeView滚动条,使用API控制接收消息的时候任务栏高亮效果,使用API移动窗体

阅读更多

项目告一段落了,整理下在项目中使用WINDOWS的API的理解
API常用的三大模块:
user32.dll(Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息);
gdi32.dll(Windows GDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字);
kernel32.dll(控制着系统的内存管理、数据的输入输出操作和中断处理);

使用API可以做一些控件没办法实现的功能,以及程序比较棘手的问题,下面这个几个例子是我在项目开发中遇到的,我把它整理出来,希望对大家有帮助.
例子中没有你想要的例子,我对API的熟悉,你有需要用到API的话,我们可以一起找资料,互相探讨,互相学习.解决你项目中实际遇到的问题.

1.使用API选择TreeView节点(由于TreeView的SelectNode只能选中一级节点,没办法选中二级节点)

 [DllImport("user32.dll ", CharSet = CharSet.Unicode)]
        private static extern int SendMessage(int hWnd, int msg, IntPtr wParam, IntPtr lparam);

        #region "常量定义 "
        private const int TVGN_CARET = 0x00000009;
        private const int TVM_SELECTITEM = 0x0000110b;
        private const int TVGN_ROOT = 0x00000000;
        private const int TVM_GETNEXTITEM = 0x0000110a;
        private const int TVIF_TEXT = 0x0001;
        private const int TVGN_NEXT = 0x00000001;
        private const int TVM_GETITEM = 0x0000110c;
        private const int TVGN_CHILD = 0x00000004;
        private const int GMEM_FIXED = 0x0000;
        #endregion

        /// <summary>
        /// 选取TreeView指定项
        /// </summary>
        /// <param name= "TreeViewHwnd "> 树对象句柄 </param>
        /// <param name= "ItemHwnd "> 节点对象句柄 </param>
        /// <returns> 成功选中返回true 没找到返回false </returns>
        public static bool SelectNode(IntPtr TreeViewHwnd, IntPtr ItemHwnd)
        {
            int result = SendMessage(TreeViewHwnd.ToInt32(), TVM_SELECTITEM, new IntPtr(TVGN_CARET), ItemHwnd);
            if (result == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        #endregion

 调用方法:SelectNode(this.tvFriendShow.Handle, sel.Handle); //TreeView句柄,节点句柄

2.使用API控制TreeView滚动条(其他控件的滚动条一样的,变换下句柄就可以了)
 //获取滚动条的位置
 [DllImport("user32.dll", EntryPoint = "GetScrollPos")]
        public static extern int GetScrollPos(IntPtr hwnd, int nbar);
 //设置滚动条的位置
        [DllImport("user32.dll", EntryPoint = "SetScrollPos")]
        public static extern int SetScrollPos(IntPtr hwnd, int nBar, int nPos, bool bRedraw);

        public const int sb_horz = 0; //滚动条水平常量

        public const int sb_vert = 1; //滚动条垂直常量

        private int nPos = 0; //原始滚动条的位置


 调用方法:
 nPos = GetScrollPos(tvFriendShow.Handle, sb_vert); //获取滚动条的位置(TreeView句柄,滚动条的方向/水平/垂直)

 SetScrollPos(tvFriendShow.Handle, sb_vert, nPos, false); //设置滚动条位置(TreeView句柄,滚动条的方向/水平/垂直,滚动条的位置,是否重新描绘)


3.使用API控制接收消息的时候任务栏高亮效果(提醒用户接收到消息,提高用户体验)
 [DllImport("user32.dll")]
        public static extern bool FlashWindow(
           IntPtr hWnd,           //  要闪烁显示的窗口的句柄。 
           bool bInvert       //   flash   status   TRUE(非零)表示切换窗口标题;FALSE返回最初状态。
        );
 调用方法:FlashWindow(this.Handle, true);//活动状态

4.使用API移动窗体(根据窗体需要可能要隐藏窗体边框,就无法移动窗体,使用API移动窗体实现移动效果)
 [DllImport("User32.dll", EntryPoint = "SendMessage")]
        private static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);
        [DllImport("User32.dll", EntryPoint = "ReleaseCapture")]
        private static extern int ReleaseCapture();
 
 调用方法:
 /// <summary>
        /// 鼠标按下的时候做处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
 private void pnlTitle_MouseDown(object sender, MouseEventArgs e)
        {
  //判断用户按下的是否是左键
            if (e.Button == MouseButtons.Left)
            {
                ReleaseCapture();//移动
                SendMessage(this.Handle.ToInt32(), 0x0112, 0xF012, 0);//将窗体移动到指定位置
            }
        }

1
4
分享到:
评论

相关推荐

    C#经典特效代码470例(PDF已经整理)

    - **实例说明**:在任务栏的系统托盘区域创建一个包含常用操作的菜单。 - **技术要点**: - 使用`NotifyIcon`类创建系统托盘图标。 - 通过`ContextMenuStrip`属性添加菜单项。 - 监听鼠标点击事件来响应用户的...

    C#程序开发范例宝典(第2版).part08

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

    C#程序开发范例宝典(第2版).part02

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

    C#程序开发范例宝典(第2版).part12

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 &lt;br&gt;1.1 Visual Studio开发环境安装与配置 2 &lt;br&gt;0001 安装Visual Studio 2005开发环境须知 2 &lt;br&gt;0002 配置合适的Visual Studio 2005...

    C#程序开发范例宝典(第2版).part13

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

Global site tag (gtag.js) - Google Analytics