怎么创建一个窗口

怎么创建一个窗口,第1张

如果选 win32 Application,那么就要编写窗口类,注册窗口类,写窗口消息处理函数,创建窗口,显示窗口,大致就这几个步骤。

如果选MFC Appwizard的话,就要从Cwnd类,或者其他窗口类继承,然后显示就可以了。你可以看看windows程序设计这方面的资料。

主要是第一个窗体类其他的2个类是我封装的WINDOWS API

using System;

using SystemCollectionsGeneric;

using SystemComponentModel;

using SystemData;

using SystemDrawing;

using SystemText;

using SystemWindowsForms;

using SystemRuntimeInteropServices;

namespace HookDemo

{

public partial class Form1 : Form

{

private SystemWindowsFormsTimer monitorTimer = null;

private KitsHookWinHook mouseHook = null;

private IntPtr HWND = IntPtrZero;

public Form1()

{

InitializeComponent();

thismonitorTimer = new Timer();

thismonitorTimerTick += new EventHandler(thisTimeProc);

thismonitorTimerInterval = 1000;

mouseHook = new KitsHookWinHook(KitsWin32APIHookTypeWH_MOUSE_LL);

}

private void Form1_Load(object sender, EventArgs e)

{

thisWindowState = FormWindowStateMinimized;

thismonitorTimerEnabled = true;

}

private void TimeProc(object sender, EventArgs e)

{

HWND = KitsWin32APIWinAPIFindWindow("Notepad", null);

if (HWND != IntPtrZero)

{

//KitsWin32APICSharpRect rect = new KitsWin32APICSharpRect();

//KitsWin32APIWinAPIGetWindowRect(HWND, ref rect);

//thisText = stringFormat("{0},{1},{2},{3}",recttop,rectleft,rectwidth,rectheight);

if (HWND == KitsWin32APIWinAPIGetForegroundWindow())

{

mouseHookSetWindowsHookEx(new KitsWin32APIHookProc(thisMouseHookProc));

}

else

{

if (mouseHookHHook != 0)

{

mouseHookUnhookWindowsHookEx();

}

}

}

}

private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)

{

if (wParam == new IntPtr((int)KitsWin32APIWindowsMessagesWM_MOUSEMOVE))

{

bool isOut = false;

KitsWin32APIMouseHookStruct MyMouseHookStruct = (KitsWin32APIMouseHookStruct)MarshalPtrToStructure(lParam, typeof(KitsWin32APIMouseHookStruct));

KitsWin32APICSharpRect rect = new KitsWin32APICSharpRect();

KitsWin32APIWinAPIGetWindowRect(HWND, ref rect);

if (MyMouseHookStructptx >= rectright)

isOut = true;

if (MyMouseHookStructptx <= rectleft)

isOut = true;

if (MyMouseHookStructpty <= recttop)

isOut = true;

if (MyMouseHookStructpty >= rectbottom)

isOut = true;

//CursorPosition = new Point(MyMouseHookStructptx, MyMouseHookStructpty);

if (isOut)

return -1;

}

return KitsWin32APIWinAPICallNextHookEx(mouseHookHHook, nCode, wParam, lParam);

}

}

}

using System;

using SystemCollectionsGeneric;

using SystemText;

using SystemRuntimeInteropServices;

namespace KitsWin32API

{

public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);

public class WinAPI

{

[DllImport("User32dll", CharSet = CharSetAuto, CallingConvention = CallingConventionStdCall)]

public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);

[DllImport("User32dll", CharSet = CharSetAuto, CallingConvention = CallingConventionStdCall)]

public static extern bool UnhookWindowsHookEx(int idHook);

[DllImport("User32dll", CharSet = CharSetAuto, CallingConvention = CallingConventionStdCall)]

public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);

[DllImport("kernel32dll", CharSet = CharSetAuto, CallingConvention = CallingConventionStdCall)]

private static extern IntPtr GetModuleHandle(string lpModuleName);

[DllImport("User32dll")]

public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);

[DllImport("User32dll")]

public static extern bool SetForegroundWindow(IntPtr hWnd);

[DllImport("User32dll")]

public static extern void keybd_event(Byte bVk, Byte bScan, Int32 dwFlags, Int32 dwExtraInfo);

[DllImport("user32")]

public static extern IntPtr GetActiveWindow();

[DllImport("user32")]

public static extern IntPtr GetForegroundWindow();

[DllImport("user32")]

public static extern int GetWindowRect(IntPtr hwnd, ref CSharpRect lpRect);

[DllImport("user32")]

public static extern int SetCaretPos(int x, int y);

[DllImport("user32")]

public static extern int ScreenToClient(IntPtr hwnd, ref POINTAPI lpPoint);

[DllImport("user32")]

public static extern int ClientToScreen(IntPtr hwnd, ref POINTAPI lpPoint);

[DllImport("user32")]

public static extern int SetCursorPos(int x, int y);

}

public struct POINTAPI

{

public int x;

public int y;

}

public struct RECT

{

public long left;

public long top;

public long right;

public long bottom;

}

public struct CSharpRect

{

public int top;

public int left;

public int right;

public int bottom;

}

public enum HookType : int

{

WH_JOURNALRECORD = 0,

WH_JOURNALPLAYBACK = 1,

WH_KEYBOARD = 2,

WH_GETMESSAGE = 3,

WH_CALLWNDPROC = 4,

WH_CBT = 5,

WH_SYSMSGFILTER = 6,

WH_MOUSE = 7,

WH_HARDWARE = 8,

WH_DEBUG = 9,

WH_SHELL = 10,

WH_FOREGROUNDIDLE = 11,

WH_CALLWNDPROCRET = 12,

WH_KEYBOARD_LL = 13,

WH_MOUSE_LL = 14

}

[StructLayout(LayoutKindSequential)]

public class POINT

{

public int x;

public int y;

}

[StructLayout(LayoutKindSequential)]

public class MouseHookStruct

{

public POINT pt;

public int wHitTestCode;

public int dwExtraInfo;

}

[StructLayout(LayoutKindSequential)]

public class MouseLLHookStruct

{

public POINT pt;

public int mouseData;

public int flags;

public int time;

public int dwExtraInfo;

}

[StructLayout(LayoutKindSequential)]

public class KeyboardHookStruct

{

public int vkCode;

public int scanCode;

public int flags;

public int time;

public int dwExtraInfo;

}

public enum WindowsMessages:int

{

WM_ACTIVATE = 0x6,

WM_ACTIVATEAPP = 0x1C,

WM_AFXFIRST = 0x360,

WM_AFXLAST = 0x37F,

WM_APP = 0x8000,

WM_ASKCBFORMATNAME = 0x30C,

WM_CANCELJOURNAL = 0x4B,

WM_CANCELMODE = 0x1F,

WM_CAPTURECHANGED = 0x215,

WM_CHANGECBCHAIN = 0x30D,

WM_CHAR = 0x102,

WM_CHARTOITEM = 0x2F,

WM_CHILDACTIVATE = 0x22,

WM_CLEAR = 0x303,

WM_CLOSE = 0x10,

WM_COMMAND = 0x111,

WM_COMPACTING = 0x41,

WM_COMPAREITEM = 0x39,

WM_CONTEXTMENU = 0x7B,

WM_COPY = 0x301,

WM_COPYDATA = 0x4A,

WM_CREATE = 0x1,

WM_CTLCOLORBTN = 0x135,

WM_CTLCOLORDLG = 0x136,

WM_CTLCOLOREDIT = 0x133,

WM_CTLCOLORLISTBOX = 0x134,

WM_CTLCOLORMSGBOX = 0x132,

WM_CTLCOLORSCROLLBAR = 0x137,

WM_CTLCOLORSTATIC = 0x138,

WM_CUT = 0x300,

WM_DEADCHAR = 0x103,

WM_DELETEITEM = 0x2D,

WM_DESTROY = 0x2,

WM_DESTROYCLIPBOARD = 0x307,

WM_DEVICECHANGE = 0x219,

WM_DEVMODECHANGE = 0x1B,

WM_DISPLAYCHANGE = 0x7E,

WM_DRAWCLIPBOARD = 0x308,

WM_DRAWITEM = 0x2B,

WM_DROPFILES = 0x233,

WM_ENABLE = 0xA,

WM_ENDSESSION = 0x16,

WM_ENTERIDLE = 0x121,

WM_ENTERMENULOOP = 0x211,

WM_ENTERSIZEMOVE = 0x231,

WM_ERASEBKGND = 0x14,

WM_EXITMENULOOP = 0x212,

WM_EXITSIZEMOVE = 0x232,

WM_FONTCHANGE = 0x1D,

WM_GETDLGCODE = 0x87,

WM_GETFONT = 0x31,

WM_GETHOTKEY = 0x33,

WM_GETICON = 0x7F,

WM_GETMINMAXINFO = 0x24,

WM_GETOBJECT = 0x3D,

WM_GETTEXT = 0xD,

WM_GETTEXTLENGTH = 0xE,

WM_HANDHELDFIRST = 0x358,

WM_HANDHELDLAST = 0x35F,

WM_HELP = 0x53,

WM_HOTKEY = 0x312,

WM_HSCROLL = 0x114,

WM_HSCROLLCLIPBOARD = 0x30E,

WM_ICONERASEBKGND = 0x27,

WM_IME_CHAR = 0x286,

WM_IME_COMPOSITION = 0x10F,

WM_IME_COMPOSITIONFULL = 0x284,

WM_IME_CONTROL = 0x283,

WM_IME_ENDCOMPOSITION = 0x10E,

WM_IME_KEYDOWN = 0x290,

WM_IME_KEYLAST = 0x10F,

WM_IME_KEYUP = 0x291,

WM_IME_NOTIFY = 0x282,

WM_IME_REQUEST = 0x288,

WM_IME_SELECT = 0x285,

WM_IME_SETCONTEXT = 0x281,

WM_IME_STARTCOMPOSITION = 0x10D,

WM_INITDIALOG = 0x110,

WM_INITMENU = 0x116,

WM_INITMENUPOPUP = 0x117,

WM_INPUTLANGCHANGE = 0x51,

WM_INPUTLANGCHANGEREQUEST = 0x50,

WM_KEYDOWN = 0x100,

WM_KEYFIRST = 0x100,

WM_KEYLAST = 0x108,

WM_KEYUP = 0x101,

WM_KILLFOCUS = 0x8,

WM_LBUTTONDBLCLK = 0x203,

WM_LBUTTONDOWN = 0x201,

WM_LBUTTONUP = 0x202,

WM_MBUTTONDBLCLK = 0x209,

WM_MBUTTONDOWN = 0x207,

WM_MBUTTONUP = 0x208,

WM_MDIACTIVATE = 0x222,

WM_MDICASCADE = 0x227,

WM_MDICREATE = 0x220,

WM_MDIDESTROY = 0x221,

WM_MDIGETACTIVE = 0x229,

WM_MDIICONARRANGE = 0x228,

WM_MDIMAXIMIZE = 0x225,

WM_MDINEXT = 0x224,

WM_MDIREFRESHMENU = 0x234,

WM_MDIRESTORE = 0x223,

WM_MDISETMENU = 0x230,

WM_MDITILE = 0x226,

WM_MEASUREITEM = 0x2C,

WM_MENUCHAR = 0x120,

WM_MENUCOMMAND = 0x126,

WM_MENUDRAG = 0x123,

WM_MENUGETOBJECT = 0x124,

WM_MENURBUTTONUP = 0x122,

WM_MENUSELECT = 0x11F,

WM_MOUSEACTIVATE = 0x21,

WM_MOUSEFIRST = 0x200,

WM_MOUSEHOVER = 0x2A1,

WM_MOUSELAST = 0x20A,

WM_MOUSELEAVE = 0x2A3,

WM_MOUSEMOVE = 0x200,

WM_MOUSEWHEEL = 0x20A,

WM_MOVE = 0x3,

WM_MOVING = 0x216,

WM_NCACTIVATE = 0x86,

WM_NCCALCSIZE = 0x83,

WM_NCCREATE = 0x81,

WM_NCDESTROY = 0x82,

WM_NCHITTEST = 0x84,

WM_NCLBUTTONDBLCLK = 0xA3,

WM_NCLBUTTONDOWN = 0xA1,

WM_NCLBUTTONUP = 0xA2,

WM_NCMBUTTONDBLCLK = 0xA9,

WM_NCMBUTTONDOWN = 0xA7,

WM_NCMBUTTONUP = 0xA8,

WM_NCMOUSEHOVER = 0x2A0,

WM_NCMOUSELEAVE = 0x2A2,

WM_NCMOUSEMOVE = 0xA0,

WM_NCPAINT = 0x85,

WM_NCRBUTTONDBLCLK = 0xA6,

WM_NCRBUTTONDOWN = 0xA4,

WM_NCRBUTTONUP = 0xA5,

WM_NEXTDLGCTL = 0x28,

WM_NEXTMENU = 0x213,

WM_NOTIFY = 0x4E,

WM_NOTIFYFORMAT = 0x55,

WM_NULL = 0x0,

WM_PAINT = 0xF,

WM_PAINTCLIPBOARD = 0x309,

WM_PAINTICON = 0x26,

WM_PALETTECHANGED = 0x311,

WM_PALETTEISCHANGING = 0x310,

WM_PARENTNOTIFY = 0x210,

WM_PASTE = 0x302,

WM_PENWINFIRST = 0x380,

WM_PENWINLAST = 0x38F,

WM_POWER = 0x48,

WM_PRINT = 0x317,

WM_PRINTCLIENT = 0x318,

WM_QUERYDRAGICON = 0x37,

WM_QUERYENDSESSION = 0x11,

WM_QUERYNEWPALETTE = 0x30F,

WM_QUERYOPEN = 0x13,

WM_QUEUESYNC = 0x23,

WM_QUIT = 0x12,

WM_RBUTTONDBLCLK = 0x206,

WM_RBUTTONDOWN = 0x204,

WM_RBUTTONUP = 0x205,

WM_RENDERALLFORMATS = 0x306,

WM_RENDERFORMAT = 0x305,

WM_SETCURSOR = 0x20,

WM_SETFOCUS = 0x7,

WM_SETFONT = 0x30,

WM_SETHOTKEY = 0x32,

WM_SETICON = 0x80,

WM_SETREDRAW = 0xB,

WM_SETTEXT = 0xC,

WM_SETTINGCHANGE = 0x1A,

WM_SHOWWINDOW = 0x18,

WM_SIZE = 0x5,

WM_SIZECLIPBOARD = 0x30B,

WM_SIZING = 0x214,

WM_SPOOLERSTATUS = 0x2A,

WM_STYLECHANGED = 0x7D,

WM_STYLECHANGING = 0x7C,

WM_SYNCPAINT = 0x88,

WM_SYSCHAR = 0x106,

WM_SYSCOLORCHANGE = 0x15,

WM_SYSCOMMAND = 0x112,

WM_SYSDEADCHAR = 0x107,

WM_SYSKEYDOWN = 0x104,

WM_SYSKEYUP = 0x105,

WM_TCARD = 0x52,

WM_TIMECHANGE = 0x1E,

WM_TIMER = 0x113,

WM_UNDO = 0x304,

WM_UNINITMENUPOPUP = 0x125,

WM_USER = 0x400,

WM_USERCHANGED = 0x54,

WM_VKEYTOITEM = 0x2E,

WM_VSCROLL = 0x115,

WM_VSCROLLCLIPBOARD = 0x30A,

WM_WINDOWPOSCHANGED = 0x47,

WM_WINDOWPOSCHANGING = 0x46,

WM_WININICHANGE = 0x1A

}

}

using System;

using SystemCollectionsGeneric;

using SystemText;

using SystemDiagnostics;

using KitsWin32API;

namespace KitsHook

{

public class WinHook

{

private int _hookType = 0;

public int HookType { get { return this_hookType; } }

private HookProc _hookProc = null;

public HookProc HookProc { get { return this_hookProc; } }

private int _hHook = 0;

public int HHook { get { return this_hHook; } }

public WinHook(HookType type) {

this_hookType = (int)type;

}

public bool SetWindowsHookEx(HookProc Proc) {

bool Success = false;

if (this_hHook == 0) {

this_hookProc = Proc;

_hHook = WinAPISetWindowsHookEx(this_hookType, this_hookProc, ProcessGetCurrentProcess()MainModuleBaseAddress, 0);

if (this_hHook != 0)

Success = true;

}

return Success;

}

public bool UnhookWindowsHookEx() {

bool Success = false;

if (this_hHook != 0)

{

Success = WinAPIUnhookWindowsHookEx(this_hHook);

}

return Success;

}

}

}

生产窗体可以使用CreateWindowEx函数。

函数功能:该函数创建一个具有扩展风格的层叠式窗口、d出式窗口或子窗口,其他与CreateWindow函数相同。

函数原型:

CreateWindowEx函数创建一个层叠的,自动d出的(pop-up)或是一个子窗口通过扩展格式。另外这个函数的作用与CreateWindow函数的作用相同。要获得更多的关于创建窗口的信息和关于CreateWindowEx函数参数的详细描述。参见CreateWindow

HWND CreateWindowEx(

DWOR DdwExStyle,        //窗口的扩展风格

LPCTSTR lpClassName,    //指向注册类名的指针

LPCTSTR lpWindowName,   //指向窗口名称的指针

DWORD dwStyle,          //窗口风格

int x,                  //窗口的水平位置

int y,                  //窗口的垂直位置

int nWidth,             //窗口的宽度

int nHeight,            //窗口的高度

HWND hWndParent,        //父窗口的句柄

HMENU hMenu,            //菜单的句柄或是子窗口的标识符

HINSTANCE hInstance,    //应用程序实例的句柄

LPVOID lpParam          //指向窗口的创建数据

);

例程:

include<windowsh>

#include<stdioh>

LRESULT CALLBACK WinDouProc(

    HWND hwnd,      // handle to window

    UINT uMsg,      // message identifier

    WPARAM wParam,  // first message parameter

    LPARAM lParam   // second message parameter

);

class CWnd

{

public:

     CWnd()

     {

          m_hWnd = NULL;

     }

     BOOL CreateEx(

          DWORD dwExStyle,      // extended window style

          LPCTSTR lpClassName,  // pointer to registered class name

          LPCTSTR lpWindowName, // pointer to window name

          DWORD dwStyle,        // window style

          int x,                // horizontal position of window

          int y,                // vertical position of window

          int nWidth,           // window width

          int nHeight,          // window height

          HWND hWndParent,      // handle to parent or owner window

         HMENU hMenu,          // handle to menu or child-window identifier

         HANDLE hInstance,     // handle to application instance

         LPVOID lpParam        // pointer to window-creation data

     );

     BOOL ShowWindow( int nCmdShow );

     BOOL UpdateWindow();

public:

     HWND m_hWnd;

};

BOOL CWnd::CreateEx(

      DWORD dwExStyle,      // extended window style

      LPCTSTR lpClassName,  // pointer to registered class name

      LPCTSTR lpWindowName, // pointer to window name

      DWORD dwStyle,        // window style

      int x,                // horizontal position of window

      int y,                // vertical position of window

      int nWidth,           // window width

      int nHeight,          // window height

      HWND hWndParent,      // handle to parent or owner window

      HMENU hMenu,          // handle to menu or child-window identifier

      HANDLE hInstance,     // handle to application instance

      LPVOID lpParam        // pointer to window-creation data

)

{

     m_hWnd = ::CreateWindowEx  (dwExStyle,lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,(HINSTANCE)hInstance,lpParam);

     if(m_hWnd != NULL)

          return TRUE;

     else

         return FALSE;

}

BOOL CWnd::ShowWindow(int nCmdShow)

{

     return ::ShowWindow(m_hWnd,nCmdShow);

}

BOOL CWnd::UpdateWindow()

{

     return ::UpdateWindow(m_hWnd);

}

int WINAPI WinMain(

  HINSTANCE hInstance,  // handle to current instance

  HINSTANCE hPrevInstance,  // handle to previous instance

  LPSTR lpCmdLine,      // pointer to command line

  int nCmdShow          // show state of window

)

{

    WNDCLASS wndclass;     //先设计窗口类

    wndclasscbClsExtra = 0;

    wndclasscbWndExtra = 0;

    wndclasshbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH);

    wndclasshCursor = LoadCursor(NULL,IDC_HELP);

    wndclasshIcon = LoadIcon(NULL,IDI_WARNING);

    wndclasshInstance = hInstance;

    wndclasslpfnWndProc = WinDouProc;

    wndclasslpszClassName = "Magic_Maggie";

    wndclasslpszMenuName = 0;

    wndclassstyle = CS_VREDRAW | CS_HREDRAW;

     //某一个变量原油几个变量去掉一个特征,可以用取反(~)后再进行与(&)

     //例如:style上去掉CS_NOCLOSE,可以style&~CS_NOCLOSE;

    RegisterClass(&wndclass);     ///注意先建立再注册昂

    CWnd wnd;

     wndCreateEx(NULL,"Magic_Maggie","DouDou",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL);

     wndShowWindow(SW_SHOWNORMAL);

     wndUpdateWindow();

     MSG msg;     //消息循环

     while(GetMessage(&msg,NULL,0,0))

    {

           TranslateMessage(&msg);

           DispatchMessage(&msg);   //触发WinDouProc

     }

    return 0;

}

 

 

LRESULT CALLBACK WinDouProc(

    HWND hwnd,      // handle to window

     UINT uMsg,      // message identifier

    WPARAM wParam,  // first message parameter

    LPARAM lParam   // second message parameter

)

{

 switch(uMsg)

 {

 case WM_LBUTTONDOWN:

      MessageBox(hwnd,"您按下了鼠标左键昂","豆豆的程序",MB_OK);

      HDC hdc;

      hdc = GetDC(hwnd);    

     //The GetDC function retrieves a handle to a display device context for the client area of a specified window or for the entire screen You can use the returned handle in subsequent GDI functions to draw in the device context

      TextOut(hdc,0,0,"感谢您对豆豆程序的支持昂",strlen("感谢您对豆豆程序的支持昂"));

      ReleaseDC(hwnd,hdc);

      break;

 

case WM_CHAR:

      char szChar[20];

      sprintf(szChar,"Char is %d",wParam);

      MessageBox(hwnd,szChar,"豆豆的程序",MB_OK);

      break;

 

case WM_PAINT:

      PAINTSTRUCT ps;

      HDC hDc;

      hDc = BeginPaint(hwnd,&ps);

      TextOut(hDc,0,0,"这个是重绘滴哦",strlen("这个是重绘滴哦"));

      EndPaint(hwnd,&ps);

      break;

 

case WM_CLOSE:   //这个case与下边的destroy这个case不要弄错了,否则窗口不出现,但任务管理器中运行

      if(IDYES == MessageBox(hwnd,"您真的要退出么","豆豆的程序",MB_YESNO))

      {

           DestroyWindow(hwnd);

      }

      break;

 

case WM_DESTROY:

      PostQuitMessage(0);

      //////////////////////////////////////////

      break;

 

default:

     return DefWindowProc(hwnd,uMsg,wParam,lParam);  // 别忘记了return

 

  }

 return 0;

}

以上就是关于怎么创建一个窗口全部的内容,包括:怎么创建一个窗口、C#用windows Api Hooks 控制鼠标键盘在一个窗体内、C++ 中如何使用API函数 生成一个窗体等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10129767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存