windows api static text控件的使用
答案:2 悬赏:10
解决时间 2021-04-21 18:50
- 提问者网友:我稀罕你
- 2021-04-21 08:34
小弟是个新手,刚学,想问下,请哪位大侠给个静态文本的简单例子,包括控件的创建之类的。(要求一定要控件,不要TEXTOUT。。。)
最佳答案
- 二级知识专家网友:摧毁过往
- 2021-04-21 09:45
MSDN中的API说明最完全 不过都是英文的。。。
写了个程序 可以枚举当前操作系统中的所有顶层窗口和子窗口(控件)
是个完整的程序。
using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace EnumWindows
{
class Program
{
private static Form form;
private static TreeView tree;
private static TextBox text;
private const uint WM_GETTEXT = 0x000D;
private static WNDENUMPROC wEnumProc;
private delegate bool WNDENUMPROC(IntPtr hwnd, TreeNode lParam); // 枚举过程委托
[DllImport("user32.dll")]
private static extern bool EnumChildWindows(IntPtr hWndParant, WNDENUMPROC lpEnumFunc, TreeNode lParam); // 枚举子窗口(控件)
[DllImport("user32.dll")]
private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, int lParam); // 枚举顶层窗口
[DllImport("User32.dll")]
private static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam); // 获得窗口标题(文本)
static void Main(string[] args)
{
form = new Form();
tree = new TreeView();
text = new TextBox();
form.Text = "Enum Windows";
form.ClientSize = new Size(600, 500);
form.Controls.Add(tree);
form.Controls.Add(text);
form.Load += new EventHandler(form_Load);
tree.Location = Point.Empty;
tree.Size = new Size(300, 500);
tree.AfterSelect += new TreeViewEventHandler(tree_AfterSelect);
text.Location = new Point(300, 0);
text.Size = new Size(300, 500);
text.Multiline = true;
text.Enabled = false;
Application.Run(form);
}
private static void form_Load(object sender, EventArgs e)
{
wEnumProc = new WNDENUMPROC(EnumWindowProc);
EnumWindows(wEnumProc, 0);
}
private static void tree_AfterSelect(object sender, EventArgs e)
{
text.Clear();
if (null == tree.SelectedNode) return;
text.Text = tree.SelectedNode.Tag.ToString();
}
private static bool EnumWindowProc(IntPtr hwnd, TreeNode lParam)
{
StringBuilder wndtext = new StringBuilder(1024);
SendMessage(hwnd, WM_GETTEXT, 128, wndtext);
if (0 == wndtext.Length) wndtext.Append("null");
if (null == lParam)
{
lParam = new TreeNode("0x" + hwnd.ToString("X8") + " - " + wndtext);
lParam.Tag = wndtext;
tree.Nodes.Add(lParam);
}
else
{
TreeNode node = new TreeNode("0x" + hwnd.ToString("X8") + " - " + wndtext);
node.Tag = wndtext;
lParam.Nodes.Add(node);
}
EnumChildWindows(hwnd, wEnumProc, lParam); // 不想枚举子窗口(控件)就把这行注释了
return true;
}
}
}
写了个程序 可以枚举当前操作系统中的所有顶层窗口和子窗口(控件)
是个完整的程序。
using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace EnumWindows
{
class Program
{
private static Form form;
private static TreeView tree;
private static TextBox text;
private const uint WM_GETTEXT = 0x000D;
private static WNDENUMPROC wEnumProc;
private delegate bool WNDENUMPROC(IntPtr hwnd, TreeNode lParam); // 枚举过程委托
[DllImport("user32.dll")]
private static extern bool EnumChildWindows(IntPtr hWndParant, WNDENUMPROC lpEnumFunc, TreeNode lParam); // 枚举子窗口(控件)
[DllImport("user32.dll")]
private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, int lParam); // 枚举顶层窗口
[DllImport("User32.dll")]
private static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam); // 获得窗口标题(文本)
static void Main(string[] args)
{
form = new Form();
tree = new TreeView();
text = new TextBox();
form.Text = "Enum Windows";
form.ClientSize = new Size(600, 500);
form.Controls.Add(tree);
form.Controls.Add(text);
form.Load += new EventHandler(form_Load);
tree.Location = Point.Empty;
tree.Size = new Size(300, 500);
tree.AfterSelect += new TreeViewEventHandler(tree_AfterSelect);
text.Location = new Point(300, 0);
text.Size = new Size(300, 500);
text.Multiline = true;
text.Enabled = false;
Application.Run(form);
}
private static void form_Load(object sender, EventArgs e)
{
wEnumProc = new WNDENUMPROC(EnumWindowProc);
EnumWindows(wEnumProc, 0);
}
private static void tree_AfterSelect(object sender, EventArgs e)
{
text.Clear();
if (null == tree.SelectedNode) return;
text.Text = tree.SelectedNode.Tag.ToString();
}
private static bool EnumWindowProc(IntPtr hwnd, TreeNode lParam)
{
StringBuilder wndtext = new StringBuilder(1024);
SendMessage(hwnd, WM_GETTEXT, 128, wndtext);
if (0 == wndtext.Length) wndtext.Append("null");
if (null == lParam)
{
lParam = new TreeNode("0x" + hwnd.ToString("X8") + " - " + wndtext);
lParam.Tag = wndtext;
tree.Nodes.Add(lParam);
}
else
{
TreeNode node = new TreeNode("0x" + hwnd.ToString("X8") + " - " + wndtext);
node.Tag = wndtext;
lParam.Nodes.Add(node);
}
EnumChildWindows(hwnd, wEnumProc, lParam); // 不想枚举子窗口(控件)就把这行注释了
return true;
}
}
}
全部回答
- 1楼网友:旧事诱惑
- 2021-04-21 10:00
windows api其实也就是一些函数官方的说法是api其实只是些函数
比如和dos函数strlen()也可以说是api
只是文件不同
比如messagebox()这个api函数在windows.h文件中
strlen在stdio.h文件中
简单的写一个api
#include "windows.h"
#include "windowsx.h"
winmain(这里有六个数)
{
messagebox(null,"你好","编程世界",mb_yesno);
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯