项目告一段落了,整理下在项目中使用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);//将窗体移动到指定位置
}
}
分享到:
相关推荐
- **实例说明**:在任务栏的系统托盘区域创建一个包含常用操作的菜单。 - **技术要点**: - 使用`NotifyIcon`类创建系统托盘图标。 - 通过`ContextMenuStrip`属性添加菜单项。 - 监听鼠标点击事件来响应用户的...
实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...
实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...
实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...
C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 <br>1.1 Visual Studio开发环境安装与配置 2 <br>0001 安装Visual Studio 2005开发环境须知 2 <br>0002 配置合适的Visual Studio 2005...
实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...