C#调API创建窗口

konetoro2009 2012-10-16 05:03:26
目的:C#调API创建窗口

注册窗口类:
ATOM RegisterClassEx(CONST WNDCLASSEX *Ipwcx)(这里参数怎么写?)
创建窗口:
HWND CreateWindowEx(
DWORD dwExStyle,
LPCTSTR IpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENUhMenu,
HANDLE hlnstance,
LPVOID lpParam)

...全文
257 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
konetoro2009 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
累不累哦
[/Quote]
新手嘛,走得累点应该的
SocketUpEx 2012-10-17
  • 打赏
  • 举报
回复
累不累哦

konetoro2009 2012-10-17
  • 打赏
  • 举报
回复
贴下我现在的代码,求解答

[DllImport("User32.dll", EntryPoint = "CreateWindowEx")]
public static extern IntPtr CreateWindowEx(
ExWindowStyle dwExStyle,
string lpClassName,
string lpWindowName,
WindowStyle dwStyle,
int x,
int y,
uint nWidth,
uint nherght,
IntPtr hWndParent,
IntPtr hMenu,
IntPtr hlnstance,
int lpParam);
[DllImport("user32.dll", EntryPoint = "RegisterClassEx")]
public static extern int RegisterClassEx(
[In] ref WNDCLASSEX Ipwcx
);

WNDCLASSEX aWNDCLASSEX = new WNDCLASSEX();
aWNDCLASSEX.cbSize = (int)Marshal.SizeOf(aWNDCLASSEX);
aWNDCLASSEX.style = 0;
aWNDCLASSEX.lpfnWndProc = new IntPtr();
aWNDCLASSEX.cbClsExtra = 0;
aWNDCLASSEX.cbWndExtra = 0;
aWNDCLASSEX.hIcon = new IntPtr();
aWNDCLASSEX.hCursor = new IntPtr();
aWNDCLASSEX.hbrBackground = new IntPtr();
aWNDCLASSEX.lpszMenuName = null;
aWNDCLASSEX.lpszClassName = "WinClass";
aWNDCLASSEX.hIconSm = new IntPtr();
RegisterClassEx(ref aWNDCLASSEX);

int lpParam = 0;
IntPtr hWndParent = new IntPtr();
IntPtr hMenu = new IntPtr();
IntPtr i = CreateWindowEx (ExWindowStyle.WS_EX_CLIENTEDGE, "lpClassName", "lpWindowName", WindowStyle.WS_BORDER, 100, 100, 100, 100, hWndParent, hMenu, aWNDCLASSEX.hInstance, lpParam);
ShowWindow(i, 1);
konetoro2009 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
C# code

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct WNDCLASSEX
{
[MarshalAs(UnmanagedType.U4)]
public int cbSize;……
[/Quote]

问下
RegisterClassEx注册窗口类
CreateWindowEx创建窗体
那 RegisterClassEx 怎么为将要创建的窗体注册,我实在有点晕
能不能帮忙写个例子啊,就是创建个窗体出来就行
konetoro2009 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
你可以翻看.net 2.0 framework的源代码,看看form.show是如何调用api的。
[/Quote]
怎么看源码?
Hauk 2012-10-16
  • 打赏
  • 举报
回复

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct WNDCLASSEX
{
[MarshalAs(UnmanagedType.U4)]
public int cbSize;
[MarshalAs(UnmanagedType.U4)]
public int style;
public IntPtr lpfnWndProc; // not WndProc
public int cbClsExtra;
public int cbWndExtra;
public IntPtr hInstance;
public IntPtr hIcon;
public IntPtr hCursor;
public IntPtr hbrBackground;
public string lpszMenuName;
public string lpszClassName;
public IntPtr hIconSm;
}

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.U2)]
static extern short RegisterClassEx([In] ref WNDCLASSEX lpwcx);


这是定义的代码,相关说明可以参见MSDN:
RegisterClassEx function
WNDCLASSEX structure
卧_槽 2012-10-16
  • 打赏
  • 举报
回复
你可以翻看.net 2.0 framework的源代码,看看form.show是如何调用api的。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧