WindowsAPI一日一练(8)UpdateWindow函数

合集下载

WindowsAPI常用函数

WindowsAPI常用函数

WindowsAPI常⽤函数.Net中虽然类库很强的,但还是有些时候功能有限,掌握常⽤的api函数,会给我们解决问题提供另⼀种思路,下⾯给出⾃⼰常⽤到的Api函数,以备查询。

1,SetForegroundWindow将窗⼝显⽰到最前⾯,前提是窗⼝没有最⼩化。

[DllImport("User32.dll")]public static extern bool SetForegroundWindow(IntPtr hWnd);2,ShowWindowAsync显⽰窗⼝,如最⼩化后显⽰正常,这是异步的。

[DllImport("User32.dll")]public static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);public enum ShowState : int{SW_HIDE = 0,SW_SHOWNORMAL = 1,SW_NORMAL = 1,SW_SHOWMINIMIZED = 2,SW_SHOWMAXIMIZED = 3,SW_MAXIMIZE = 3,SW_SHOWNOACTIVATE = 4,SW_SHOW = 5,SW_MINIMIZE = 6,SW_SHOWMINNOACTIVE = 7,SW_SHOWNA = 8,SW_RESTORE = 9,SW_SHOWDEFAULT = 10,SW_FORCEMINIMIZE = 11,SW_MAX = 11}3,SendMessage进程间通信,接受窗⼝要有消息循环才⾏。

WM_COPYDATApublic const int WM_COPYDATA = 0x004A;public struct COPYDATASTRUCT{public IntPtr dwData;public int cbData;[MarshalAs(UnmanagedType.LPStr)]public string lpData;}[DllImport("User32.dll", EntryPoint = "SendMessage")]public static extern int SendMessage(IntPtr hWnd, // handle to destination windowint Msg, // messageint wParam, // first message parameterref COPYDATASTRUCT lParam // second message parameter);例⼦:发送⽅:byte[] sarr = System.Text.Encoding.Default.GetBytes(args[0]);Winn32.COPYDATASTRUCT copyData = new Winn32.COPYDATASTRUCT();copyData.cbData = sarr.Length + 1;copyData.lpData = args[0];copyData.dwData = (IntPtr)100; //这⾥随便写什么数字Winn32.SendMessage(runningInstance.MainWindowHandle, Winn32.WM_COPYDATA, 0, ref copyData);接收⽅protected override void DefWndProc(ref Message m){if (m.Msg == Winn32.WM_COPYDATA){Winn32.COPYDATASTRUCT copyData = new Winn32.COPYDATASTRUCT();Type type = copyData.GetType();copyData = (Winn32.COPYDATASTRUCT)m.GetLParam(type);this.textBox1.Text = copyData.lpData;}base.DefWndProc(ref m);}4,FindWindow找到窗⼝句柄[DllImport("User32.dll", EntryPoint = "FindWindow")]private static extern int FindWindow(string lpClassName, string lpWindowName);5,SetLocalTime设定系统时间[StructLayout(LayoutKind.Sequential)]public struct SYSTEMTIME{public ushort wYear;public ushort wMonth;public ushort wDayOfWeek;public ushort wDay;public ushort wHour;public ushort wMinute;public ushort wSecond;public ushort wMilliseconds;public void FromDateTime(DateTime dateTime){wYear = (ushort)dateTime.Year;wMonth = (ushort)dateTime.Month;wDayOfWeek = (ushort)dateTime.DayOfWeek;wDay = (ushort)dateTime.Day;wHour = (ushort)dateTime.Hour;wMinute = (ushort)dateTime.Minute;wSecond = (ushort)dateTime.Second;wMilliseconds = (ushort)lisecond;}public DateTime ToDateTime(){return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond); }}[DllImport("kernel32.dll")]public static extern bool SetLocalTime(ref SYSTEMTIME Time);6,SHGetFileInfo获取执⾏⽂件的图标icon[Flags]enum SHGFI : int{/// <summary>get icon</summary>Icon = 0x000000100,/// <summary>get display name</summary>DisplayName = 0x000000200,/// <summary>get type name</summary>TypeName = 0x000000400,/// <summary>get attributes</summary>Attributes = 0x000000800,/// <summary>get icon location</summary>IconLocation = 0x000001000,/// <summary>return exe type</summary>ExeType = 0x000002000,/// <summary>get system icon index</summary>SysIconIndex = 0x000004000,/// <summary>put a link overlay on icon</summary>LinkOverlay = 0x000008000,/// <summary>show icon in selected state</summary>Selected = 0x000010000,/// <summary>get only specified attributes</summary>Attr_Specified = 0x000020000,/// <summary>get large icon</summary>LargeIcon = 0x000000000,/// <summary>get small icon</summary>SmallIcon = 0x000000001,/// <summary>get open icon</summary>OpenIcon = 0x000000002,/// <summary>get shell size icon</summary>ShellIconSize = 0x000000004,/// <summary>pszPath is a pidl</summary>PIDL = 0x000000008,/// <summary>use passed dwFileAttribute</summary>UseFileAttributes = 0x000000010,/// <summary>apply the appropriate overlays</summary>AddOverlays = 0x000000020,/// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary> OverlayIndex = 0x000000040,}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]public struct SHFILEINFO{public SHFILEINFO(bool b){hIcon = IntPtr.Zero;iIcon = 0;dwAttributes = 0;szDisplayName = "";szTypeName = "";}public IntPtr hIcon;public int iIcon;public uint dwAttributes;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]public string szDisplayName;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]public string szTypeName;};[DllImport("shell32.dll", CharSet = CharSet.Unicode)]//路径有中⽂字符,要⽤unicodepublic static extern int SHGetFileInfo(string pszPath,int dwFileAttributes,out SHFILEINFO psfi,uint cbfileInfo,SHGFI uFlags);例⼦:private static Icon GetIcon(string strPath, bool bSmall){SHFILEINFO info = new SHFILEINFO(true);int cbFileInfo = Marshal.SizeOf(info);SHGFI flags;if (bSmall)flags = SHGFI.Icon | SHGFI.SmallIcon | eFileAttributes;elseflags = SHGFI.Icon | rgeIcon;Win32API.SHGetFileInfo(strPath, 256, out info, (uint)cbFileInfo, flags);return Icon.FromHandle(info.hIcon);}7,GetWindowThreadProcessId得到句柄的进程和线程ID,返回的是线程ID,ref返回的是进程ID[System.Runtime.InteropServices.DllImport("User32.dll")]private static extern int GetWindowThreadProcessId(int Hwnd, ref int OutPressId);例⼦:杀死excel进程int processID = 0;int threadID;threadID = GetWindowThreadProcessId(excelApp.Hwnd, ref processID);if (processID > 0){System.Diagnostics.Process process = System.Diagnostics.Process.GetProcessById(processID); if (process != null){ process.Kill(); }}。

Windows API函数大全

Windows API函数大全

Windows API函数我们知道VB可以做很多事,但是有些事情,特别是涉及对Windows操作系统的访问,还需要借助Win32 API函数(Microsoft Win32 Application Programming Interface的缩写)。

API 函数是一组用C语言编写的函数,总共约有一千来个。

原本是为C语言编程人员而编写的,但也可以在VB应用程序中调用。

按功能划分,Win32 API函数大致涉及以下几个方面:窗口管理、图形设备接口、系统管理和多媒体技术。

Win32 API函数以动态链接库DLL提供给用户,可以在任何语言中调用。

DLL在程序运行时装入,随时响应程序的调用,不必在设计时就将文件存放在工程中,这就是动态链接的意思。

正因为如此,一个DLL程序可以同时为多个程序所调用。

在VB中引用API函数,需要事先通过Declare函数,声明要引用的DLL文件名称以及相应函数的参量。

然后便可像使用VB函数一样使用API函数。

我们看以下类似的声明语句:Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As LongGetComputerName是API函数名,kernel32是库名。

括号中的ByVal lpBuffer As String, nSize As Long就是函数的参量。

最后面的Long表示函数返回值的数据类型。

本节通过例子说明Win32 API函数的应用。

Windows在创建每个窗体时,都会赋给它一个与众不同的编号,这就是窗体的句柄。

在Windows中,窗体与控件都被看成是窗体(窗口)。

窗体的句柄保存在自己的hwnd属性中。

一.GetComputerName二、GetCursorPos三、GetWindowsDirectoryWindows API函数四、ClipCursor五、GetProfileInt六、GetProfileString七、PolygonWindows API函数八、SendMessagePublic Enum VBWin_MsgWM_NULL = &H0WM_CREATE = &H1WM_DESTROY = &H2WM_MOVE = &H3WM_SIZE = &H5WM_ACTIVATE = &H6WM_SETFOCUS = &H7WM_KILLFOCUS = &H8WM_ENABLE = &HAWM_SETREDRAW = &HBWM_SETTEXT = &HCWM_GETTEXTLENGTH = &HEWM_PAINT = &HFWM_CLOSE = &H10WM_QUERYENDSESSION = &H11WM_QUIT = &H12WM_QUERYOPEN = &H13WM_ERASEBKGND = &H14WM_SYSCOLORCHANGE = &H15WM_ENDSESSION = &H16WM_SHOWWINDOW = &H18WM_WININICHANGE = &H1AWM_DEVMODECHANGE = &H1BWM_ACTIVATEAPP = &H1CWM_FONTCHANGE = &H1DWM_TIMECHANGE = &H1EWM_CANCELMODE = &H1FWM_SETCURSOR = &H20WM_MOUSEACTIVATE = &H21WM_CHILDACTIVATE = &H22WM_QUEUESYNC = &H23WM_GETMINMAXINFO = &H24'begin_r_winuserWM_PAINTICON = &H26WM_ICONERASEBKGND = &H27WM_NEXTDLGCTL = &H28WM_SPOOLERSTATUS = &H2AWM_DRAWITEM = &H2BWM_MEASUREITEM = &H2CWM_DELETEITEM = &H2DWM_VKEYTOITEM = &H2EWM_CHARTOITEM = &H2FWM_SETFONT = &H30WM_GETFONT = &H31WM_SETHOTKEY = &H32WM_GETHOTKEY = &H33WM_QUERYDRAGICON = &H37WM_COMPAREITEM = &H39WM_COMPACTING = &H41WM_COMMNOTIFY = &H44 '/* no longer suported */WM_WINDOWPOSCHANGING = &H46WM_WINDOWPOSCHANGED = &H47WM_POWER = &H48WM_CANCELJOURNAL = &H4B'end_r_winuser'lParam of WM_COPYDATA message points to...'begin_r_winuser' '#if(WINVER > = 0x0400)WM_NOTIFY = &H4EWM_INPUTLANGCHANGEREQUEST = &H50WM_INPUTLANGCHANGE = &H51WM_TCARD = &H52WM_HELP = &H53WM_USERCHANGED = &H54WM_NOTIFYFORMAT = &H55WM_CONTEXTMENU = &H7BWM_STYLECHANGING = &H7CWM_STYLECHANGED = &H7DWM_DISPLAYCHANGE = &H7EWM_GETICON = &H7FWM_SETICON = &H80' '#endif /* WINVER > = 0x0400 */WM_NCCREATE = &H81WM_NCDESTROY = &H82WM_NCCALCSIZE = &H83WM_NCHITTEST = &H84WM_NCPAINT = &H85WM_NCACTIVATE = &H86WM_GETDLGCODE = &H87WM_SYNCPAINT = &H88WM_NCMOUSEMOVE = &HA0WM_NCLBUTTONDOWN = &HA1WM_NCLBUTTONUP = &HA2WM_NCLBUTTONDBLCLK = &HA3WM_NCRBUTTONDOWN = &HA4WM_NCRBUTTONUP = &HA5WM_NCRBUTTONDBLCLK = &HA6WM_NCMBUTTONDOWN = &HA7WM_NCMBUTTONUP = &HA8WM_NCMBUTTONDBLCLK = &HA9WM_KEYFIRST = &H100WM_KEYDOWN = &H100WM_KEYUP = &H101WM_CHAR = &H102WM_SYSKEYDOWN = &H104WM_SYSKEYUP = &H105WM_SYSCHAR = &H106WM_SYSDEADCHAR = &H107WM_KEYLAST = &H108' '#if(WINVER > = 0x0400)WM_IME_STARTCOMPOSITION = &H10DWM_IME_ENDCOMPOSITION = &H10EWM_IME_COMPOSITION = &H10FWM_IME_KEYLAST = &H10F' '#endif /* WINVER > = 0x0400 */WM_INITDIALOG = &H110WM_COMMAND = &H111WM_SYSCOMMAND = &H112WM_TIMER = &H113WM_HSCROLL = &H114WM_VSCROLL = &H115WM_INITMENU = &H116WM_INITMENUPOPUP = &H117WM_MENUSELECT = &H11FWM_MENUCHAR = &H120WM_ENTERIDLE = &H121'#if(WINVER > = 0x0500)WM_MENURBUTTONUP = &H122WM_MENUDRAG = &H123WM_MENUGETOBJECT = &H124WM_UNINITMENUPOPUP = &H125WM_MENUCOMMAND = &H126'#endif /* WINVER > = 0x0500 */WM_CTLCOLORMSGBOX = &H132WM_CTLCOLOREDIT = &H133WM_CTLCOLORLISTBOX = &H134WM_CTLCOLORBTN = &H135WM_CTLCOLORDLG = &H136WM_CTLCOLORSCROLLBAR = &H137WM_CTLCOLORSTATIC = &H138WM_MOUSEFIRST = &H200WM_LBUTTONDOWN = &H201WM_LBUTTONUP = &H202WM_LBUTTONDBLCLK = &H203WM_RBUTTONDOWN = &H204WM_RBUTTONUP = &H205WM_RBUTTONDBLCLK = &H206WM_MBUTTONDOWN = &H207WM_MBUTTONUP = &H208WM_MBUTTONDBLCLK = &H209'#if (_WIN32_WINNT > = 0x0400) || (_WIN32_WINDOWS > 0x0400) WM_MOUSEWHEEL = &H20AWM_MOUSELAST = &H20A'#Else' WM_MOUSELAST = &H209'#endif /* if (_WIN32_WINNT < 0x0400) */'#if(_WIN32_WINNT > = 0x0400)'#define WHEEL_DELTA 120 /* Value for rolling one detent */'#endif /* _WIN32_WINNT > = 0x0400 */'#if(_WIN32_WINNT > = 0x0400)'#define WHEEL_PAGESCROLL (UINT_MAX) /* Scroll on e page */'#endif /* _WIN32_WINNT > = 0x0400 */WM_PARENTNOTIFY = &H210WM_ENTERMENULOOP = &H211WM_EXITMENULOOP = &H212'#if(WINVER > = 0x0400)WM_NEXTMENU = &H213'// end_r_winuserWM_DEVICECHANGE = &H219'#endif /* WINVER > = 0x0400 */WM_MDICREATE = &H220WM_MDIDESTROY = &H221WM_MDIACTIVATE = &H222WM_MDIRESTORE = &H223WM_MDINEXT = &H224WM_MDIMAXIMIZE = &H225WM_MDITILE = &H226WM_MDICASCADE = &H227WM_MDIICONARRANGE = &H228WM_MDIGETACTIVE = &H229WM_MDISETMENU = &H230WM_ENTERSIZEMOVE = &H231WM_EXITSIZEMOVE = &H232WM_DROPFILES = &H233WM_MDIREFRESHMENU = &H234'#if(WINVER > = 0x0400)WM_IME_SETCONTEXT = &H281WM_IME_NOTIFY = &H282WM_IME_CONTROL = &H283WM_IME_COMPOSITIONFULL = &H284WM_IME_SELECT = &H285WM_IME_CHAR = &H286'#endif /* WINVER > = 0x0400 */'#if(WINVER > = 0x0500)WM_IME_REQUEST = &H288'#endif /* WINVER > = 0x0500 */'#if(WINVER > = 0x0400)WM_IME_KEYDOWN = &H290WM_IME_KEYUP = &H291'#endif /* WINVER > = 0x0400 */'#if(_WIN32_WINNT > = 0x0400)WM_MOUSEHOVER = &H2A1WM_MOUSELEAVE = &H2A3'#endif /* _WIN32_WINNT > = 0x0400 */WM_CUT = &H300WM_COPY = &H301WM_PASTE = &H302WM_CLEAR = &H303WM_UNDO = &H304WM_RENDERFORMAT = &H305WM_RENDERALLFORMATS = &H306WM_DESTROYCLIPBOARD = &H307WM_DRAWCLIPBOARD = &H308WM_PAINTCLIPBOARD = &H309WM_VSCROLLCLIPBOARD = &H30AWM_SIZECLIPBOARD = &H30BWM_ASKCBFORMATNAME = &H30CWM_CHANGECBCHAIN = &H30DWM_HSCROLLCLIPBOARD = &H30EWM_QUERYNEWPALETTE = &H30FWM_PALETTEISCHANGING = &H310WM_PALETTECHANGED = &H311WM_HOTKEY = &H312'#if(WINVER > = 0x0400)WM_PRINT = &H317WM_PRINTCLIENT = &H318WM_HANDHELDFIRST = &H358WM_HANDHELDLAST = &H35FWM_AFXFIRST = &H360WM_AFXLAST = &H37F'#endif /* WINVER > = 0x0400 */WM_PENWINFIRST = &H380WM_PENWINLAST = &H38FWM_USER = &H400Public Enum eWM_MsgWM_NULL = &H0WM_CREATE = &H1WM_DESTROY = &H2WM_MOVE = &H3WM_SIZE = &H5WM_ACTIVATE = &H6WM_SETFOCUS = &H7WM_KILLFOCUS = &H8WM_USER = &H400End Enum九、GlobalMemoryStatus十、GetSystemMenu十一、GetMenuItemInfo十二、SetMenuItemInfo十三、SetCursorPos十四、SetWindowPos十五、GetUserName。

WindowsAPI函数大全(API之进程和线程函数)

WindowsAPI函数大全(API之进程和线程函数)

WindowsAPI函数大全(API之进程和线程函数)API之进程和线程函数CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用ConnectNamedPipe 指示一台服务器等待下去,直至客户机同一个命名管道连接CreateEvent 创建一个事件对象CreateMailslot 创建一个邮路。

返回的句柄由邮路服务器使用(收件人)CreateMutex 创建一个互斥体(MUTEX)CreateNamedPipe 创建一个命名管道。

返回的句柄由管道的服务器端使用CreatePipe 创建一个匿名管道CreateProcess 创建一个新进程(比如执行一个程序)CreateSemaphore 创建一个新的信号机CreateWaitableTimer 创建一个可等待的计时器对象DisconnectNamedPipe 断开一个客户与一个命名管道的连接DuplicateHandle 在指出一个现有系统对象当前句柄的情况下,为那个对象创建一个新句柄ExitProcess 中止一个进程FindCloseChangeNotification 关闭一个改动通知对象FindExecutable 查找与一个指定文件关联在一起的程序的文件名FindFirstChangeNotification 创建一个文件通知对象。

该对象用于监视文件系统发生的变化FindNextChangeNotification 重设一个文件改变通知对象,令其继续监视下一次变化FreeLibrary 释放指定的动态链接库GetCurrentProcess 获取当前进程的一个伪句柄GetCurrentProcessId 获取当前进程一个唯一的标识符GetCurrentThread 获取当前线程的一个伪句柄GetCurrentThreadId 获取当前线程一个唯一的线程标识符GetExitCodeProces 获取一个已中断进程的退出代码GetExitCodeThread 获取一个已中止线程的退出代码GetHandleInformation 获取与一个系统对象句柄有关的信息GetMailslotInfo 获取与一个邮路有关的信息GetModuleFileName 获取一个已装载模板的完整路径名称GetModuleHandle 获取一个应用程序或动态链接库的模块句柄GetPriorityClass 获取特定进程的优先级别GetProcessShutdownParameters 调查系统关闭时一个指定的进程相对于其它进程的关闭早迟情况GetProcessTimes 获取与一个进程的经过时间有关的信息GetProcessWorkingSetSize 了解一个应用程序在运行过程中实际向它交付了多大容量的内存GetSartupInfo 获取一个进程的启动信息GetThreadPriority 获取特定线程的优先级别GetTheardTimes 获取与一个线程的经过时间有关的信息GetWindowThreadProcessId 获取与指定窗口关联在一起的一个进程和线程标识符LoadLibrary 载入指定的动态链接库,并将它映射到当前进程使用的地址空间LoadLibraryEx 装载指定的动态链接库,并为当前进程把它映射到地址空间LoadModule 载入一个Windows应用程序,并在指定的环境中运行MsgWaitForMultipleObjects 等侯单个对象或一系列对象发出信号。

getwindowswithtitle用法

getwindowswithtitle用法

getwindowswithtitle用法在Windows操作系统中,使用`GetWindow`函数可以获取指定窗口的句柄,进而对窗口进行操作。

`GetWindow`函数的用法相对简单,但需要了解一些关键参数的含义和用法。

本文将介绍`GetWindow`函数的用法,包括函数原型、参数说明、返回值和示例代码。

一、函数原型`GetWindow`函数的原型如下:```c++HWNDGetWindow(HWNDhWnd,DWORDdwFlags);```其中,`hWnd`参数指定要获取窗口句柄的窗口的父窗口句柄;`dwFlags`参数指定窗口类型和窗口状态的标志位。

二、参数说明1.`hWnd`:要获取窗口句柄的窗口的父窗口句柄。

如果需要获取指定窗口的子窗口句柄,可以使用`GetWindowSubclass`函数。

2.`dwFlags`:指定窗口类型和窗口状态的标志位,通常使用以下标志位之一:*`GW_HWNDFIRST`:获取指定窗口及其子窗口中最先出现的窗口的句柄。

*`GW_HWNDLAST`:获取指定窗口及其子窗口中最后出现的窗口的句柄。

*`GW_OWNER`:获取指定窗口的所有者窗口的句柄。

*`GW_CHILD`:获取指定窗口的子窗口的句柄。

*`GW_VISIBLE`:获取可见窗口的句柄。

*`GW_HSCROLL`:获取具有水平滚动条的窗口的句柄。

*`GW_VSCROLL`:获取具有垂直滚动条的窗口的句柄。

*`GW_MAX`:其他标志位可以在应用程序中自定义使用。

三、返回值`GetWindow`函数返回指定窗口的句柄,如果无法获取该窗口的句柄,则返回NULL。

四、示例代码下面是一个简单的示例代码,演示如何使用`GetWindow`函数获取指定窗口的句柄:```c++#include<windows.h>#include<iostream>intmain(){HWNDhwnd=GetWindow(GetDesktopWindow(),GW_OWNER);//获取桌面窗口的所有者窗口的句柄if(hwnd!=NULL){//判断是否成功获取窗口句柄std::cout<<"Successfullygotwindowhandle:"<<hwnd<<std::endl;}else{std::cout<<"Failedtogetwindowhandle."<<std::endl;}return0;}```在上述示例中,我们使用`GetDesktopWindow()`函数获取桌面窗口的句柄,并使用`GW_OWNER`标志位调用`GetWindow`函数获取桌面窗口的所有者窗口的句柄。

Invalidate和UpdateWindow的区别

Invalidate和UpdateWindow的区别

UpdateData、Invalidate、InvalidateRect和UpdateWindow及RedrawWindowInvalidate和UpdateWindow的区别:Invalidate在消息队列中加入一条WM_PAINT消息,其无效区为整个客户区。

而UpdateWindow直接发送一个WM_PAINT消息,其无效区范围就是消息队列中WM_PAINT 消息(最多只有一条)的无效区。

效果很明显,调用Invalidate之后,屏幕不一定马上更新,因为WM_PAINT 消息不一定在队列头部,而调用UpdateWindow会使WM_PAINT消息马上执行的,绕过了消息队列。

如果你调用Invalidate之后想马上更新屏幕,那就加上UpdateWindow()这条语句。

1.UpdateData():当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了什么,就应该在访问变量前调用UpdateData(TRUE),将控件的输入映射到变量中。

2.Invalidate():该函数的作用是使整个窗口客户区无效。

窗口的客户区无效意味着需要重绘。

例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。

这时Windows 会在应用程序的消息队列中放置WM_PAINT消息。

MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。

视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。

参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。

3.InvalidateRect():该函数的功能与Invalidate基本一样,不同的是,它是使指定的某个区域无效,需要输入一个区域,如果参数为NULL,则设置整个窗口为无效区。

winform练习题

winform练习题

Winform练习题一、基础操作创建一个主窗体,窗体为“基础操作练习”。

在主窗体上添加一个按钮,按钮文本为“显示消息”。

为按钮添加事件,按钮后,在消息框中显示“Hello,World!”。

文本框中输入内容后,按钮,将文本框内容显示在标签上。

在列表框中添加三个选项:“选项1”、“选项2”、“选项3”。

按钮后,将列表框中选中的选项显示在消息框中。

二、控件应用一个标签,显示“请输入姓名:”。

一个文本框,用于输入姓名。

一个按钮,后显示“您好,姓名!”(姓名为文本框中输入的内容)。

包含一个复选框列表,列出三个选项:“足球”、“篮球”、“乒乓球”。

一个按钮,后显示用户选择的运动项目。

一个单选按钮组,包含三个选项:“男”、“女”、“其他”。

一个按钮,后显示用户选择的性别。

三、事件处理包含一个文本框和一个标签。

当文本框内容改变时,自动更新标签内容为文本框中的内容。

每次按钮,标签中的数字增加1。

按钮后,进度条开始从0到100递增。

四、界面布局三个标签,分别显示“姓名”、“年龄”、“性别”。

三个文本框,分别用于输入姓名、年龄、性别。

一个按钮,后显示输入的信息。

五个按钮,按钮文本分别为“1”、“2”、“3”、“4”、“5”。

按钮自动排列在一行。

左侧为列表框,列出五个选项。

右侧为文本框,显示左侧列表框中选中的选项。

五、文件操作一个文本框,用于输入文件路径。

一个按钮,后读取文本框中的文件路径,并将文件内容显示在另一个文本框中。

一个按钮,后打开文件对话框,选择一个文件并读取其内容,显示在文本框中。

一个文本框,用于输入要保存的内容。

一个按钮,后将文本框中的内容保存到文件中。

六、图形与绘图在窗体上绘制一个矩形。

在矩形内部绘制一个圆形。

在窗体上绘制一个正弦波形。

在窗体���绘制一个时钟,显示当前时间。

七、数据库操作连接到一个数据库(例如:SQL Server、MySQL等)。

查询数据库中的数据,并将结果显示在数据网格视图中。

插入一条新记录到数据库中。

Windows体系编程实验报告

Windows体系编程实验报告

课程设计报告( 2011——2012年度第 2 学期)名称:Windows体系编程题目:课内综合实验院系:科技学院信息工程系班级:软件09K2学号:0919********学生姓名:何少华指导教师:王新颖实验学时:12学时成绩:日期:2012 年 5 月28 日实验一类windows进程任务管理器实验一、课程设计的目的与要求目的:理解Windows编程环境下的进程管理机制,能创建一个完成特定功能的进程,并能对进程进行信息的获取、终止和保护,实现一个类Windows的进程任务管理器。

要求:1.编写一段程序,能够完成创建进程的功能,要求启动windows记事本程序(notepad.exe),同时打开一个文本文件,路径为:c:\system\user.log 。

并打印出新建进程ID。

2.获取当前系统进程信息,打印输出进程名称和ID号。

3.终止任意进程并获取退出代码。

二、设计正文#include "stdafx.h"#include <windows.h>#include <stdio.h>#include <tlhelp32.h> // 声明快照函数的头文件BOOL TerminateProcessFromId(DWORD dwId){BOOL bRet = FALSE;// 打开目标进程,取得进程句柄HANDLE hProcess = ::OpenProcess (PROCESS_ALL_ACCESS, FALSE, dwId);//PROCESS_ALL_ACCESS:所有权限,包括创建、读、写等。

//OpenProcess如果成功,则该进程内核对象引用计数+1if(hProcess != NULL){bRet = ::TerminateProcess(hProcess, 0);CloseHandle(hProcess);//结束了进程,还要使该进程内核对象引用计数-1 }return bRet;}int main(int argc, char* argv[]){char szCommandLine[] = "notepad ";STARTUPINFO si = { sizeof(si) };PROCESS_INFORMATION pi;si.dwFlags = STARTF_USESHOWWINDOW; // 指定wShowWindow成员有效si.wShowWindow = TRUE; // 此成员设为TRUE的话则显示新建进程的主口,// 为FALSE的话则不显示BOOL bRet = ::CreateProcess (NULL, // 不在此指定可执行文件的文件名szCommandLine, // 命令行参数NULL, // 默认进程安全性NULL, // 默认线程安全性FALSE, // 指定当前进程内的句柄不可以被子进程继承CREATE_NEW_CONSOLE, // 为新进程创建一个新的控制台窗口NULL, // 使用本进程的环境变量NULL, // 使用本进程的驱动器和目录&si,&pi);if(bRet){// 既然我们不使用两个句柄,最好是立刻将它们关闭::CloseHandle (pi.hThread);::CloseHandle (pi.hProcess);printf(" 新进程的进程ID号:%d \n", pi.dwProcessId);printf(" 新进程的主线程ID号:%d \n", pi.dwThreadId);}PROCESSENTRY32 pe32; // 在使用这个结构之前,先设置它的大小pe32.dwSize = sizeof(pe32); // 给系统内的所有进程拍一个快照HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if(hProcessSnap == INVALID_HANDLE_VALUE){ printf(" CreateToolhelp32Snapshot调用失败! \n");return -1;}BOOL bMore = ::Process32First(hProcessSnap, &pe32);// 遍历快照,轮流显示每个进程的信息while(bMore){ printf(" 进程名称:%s \n", pe32.szExeFile);printf(" 进程ID号:%u \n\n", pe32.th32ProcessID);bMore = ::Process32Next(hProcessSnap, &pe32);}// 不要忘记清除掉snapshot对象::CloseHandle(hProcessSnap);DWORD dwId;printf(" 请输入您要终止的进程的ID号: \n");scanf("%u", &dwId);if(TerminateProcessFromId(dwId)){printf(" 终止进程成功! \n");}else{printf(" 终止进程失败! \n");}return 0;}实验结果:实验二窗口与DLL实验一、实验目的与要求:目的:了解windows窗口程序的结构与特点,了解windows程序中至关重要的消息机制,包括消息的定义、消息循环以及消息相应函数。

初级 WINDOWS API C++语言版

初级 WINDOWS API C++语言版

初级WINDOWS API C++语言版编程(一)原创:豆豆龙2002年3月6日本站原创: 豆豆龙当我们使用着漂亮的界面,方便快捷的应用程序的时候。

我们才会发现,以前曾编写的程序是多么的粗糙(TC编写的程序)。

简单的界面,16色的显示系统,大大的落后于计算机的发展。

简单的说就是杀鸡用牛刀。

如何该改变这种情况呢?Microsoft公司在推出windows操作系统的时候给出了简单易行的解决方案。

这就是WINDOWS平台API 应用程序接口。

当然API也是发展的,它从WIN 16 API发展到了现在普遍使用的WIN 32 API。

只有充分理解API函数功能和用法,才能深入到WINDOWS系统的内部,才能充分挖掘出操作系统给我们提供的强大功能。

现在就让我们放弃那DOS应用程序,进入WINDOWS编程的海洋之中吧。

要想了解WINDOWS API那么我们必须先了解WINDOWS下的程序是如何进行驱动的。

同学们可以很清楚的发现到,当你在使用WINDOWS记事本的时候,当键盘输入字符的时候字就会出现在屏幕上。

当你移动鼠标的时候,光标就会在屏幕上移动。

双击鼠标、单击鼠标就会有相应的事件发生。

这些都是由于WINDOWS具有的事件驱动的属性造成的。

比如说当你按下键盘的字符键的时候,消息队列就会向程序发送WM_CHAR的消息,如果你所写的程序中含有处理这个消息的函数,程序就会执行它。

为了更好的了解WINDOWS编程,这里我必须介绍几个基本的概念:1,句柄:它是WINDOWS编程的基础。

一个句柄是指WINDOWS在内存中使用的一个唯一的整数质,是一个4个字节长的数值,用于标识应用程序中不同对象和相同对象的不同实例。

这里我列出几种WINDOWS常用的句柄:HWND: 标示窗口句柄HINSTANCE:标示当前实例句柄HCOURSOR:标示光标句柄HFONT: 标示字体句柄HPEN:标示画笔句柄HBRUSH:标示画刷句柄HDC:标示设备环境句柄HBITMP:标示位图句柄HICON:标示图标句柄HMENU:标示菜单句柄HFILE:标示文件句柄由于WINDOWS应用程序利用WINDOWS消息来与其它的WINDOWS应用程序及WINDOWS系统进行消息交换。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档