问 3 个问题,有兴趣来看看(170分)

  • 主题发起人 CrendKing
  • 开始时间
C

CrendKing

Unregistered / Unconfirmed
GUEST, unregistred user!
一、哪一位知道,C# 中,在 EnumChildWindows(IntPtr hWndParent, int lpEnumFunc, int lParam) 调用中,回调函数 EnumChildWindowsProc 的地址该怎么写啊?如,在 Delphi 中就是 @EnumChildWindowsProc,VB 中就是 addressOf EnumChildWindowsProc,就是不知 C# 怎么写。唉,没 MSDN 真是不爽!
二、在 Visual Studio .NET 2003 中我能不能修改新建窗体的默认属性?如,我希望任何一个新建的窗体的 AutoScroll 属性就为 True ,而不是默认的 False。我指的不是自己建一个窗体类,而是在 VS.NET 2003 的 Options 里面改。
三、请问有没有和为 Delphi 设计的 DelforExp 类似的 C# 代码格式优化工具?
 
关于第一个问题:对于API函数我还不知道如何在C#中调用,是否有什么类库封装了原来的api?请楼主不吝赐教。
第二个问题: 好像不行
第三个问题:在C#中用快捷键CtrL+K、Ctrl+F可以格式化代码,代码具体的格式可以在工具-->选项--〉文本编辑器中设定
 
向我讨教?开玩笑了,我也是从网上学的,你可以去 http://www.chinaspx.com/article/go.asp?id=293&typeid=3 看看,很有帮助。
简单的说,和 VB 类似,每个 API 需要自己声明(我现在觉得 Delphi 比 C 好的就是这个,不许声明,瓜微软)。引用 System.Runtime.InteropServices 名字空间,用以下方法声明:
DllImport("DLL File Name")]
public static extern ReturnType FunctionName(type arg1,type arg2,...);
声明处应为 Application Entry 。
 
第一个问题我已解决:
要用 Delegate(委托):
相关 NameSpace 引用:
using System.Runtime.InteropServices;
//API
using System.Text;
//StringBuilder
API 声明:
[DllImport("user32.dll")]
public static extern int EnumChildWindows(IntPtr hWndParent, CallBack lpEnumFunc, int lParam);
[DllImport("user32.dll")]
public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
Delegate 声明:
public delegate bool CallBack(IntPtr hWnd, int lParam);
变量声明:
static StringBuilder IEAddress = new StringBuilder(2048);
函数:
public static bool EnumChildProc(IntPtr hWnd, int lParam)
{
int CopyCharNum;
StringBuilder Buffer = new StringBuilder(256);
GetClassName(hWnd, Buffer, Buffer.Capacity);
if (Buffer.ToString() == "Edit")
{
CopyCharNum = SendMessage(hWnd, WM_GETTEXT, 256, IEAddress);
if (CopyCharNum != 0)
return false;
else
return true;
}
else
return true;
}
调用:
CallBack myCallBack = new CallBack(EnumChildProc);
EnumChildWindows(hWnd, myCallBack, 0);
 

Similar threads

顶部