VCMFC编程各种窗口句柄获取函数详解

合集下载

vcmfc编程各种窗口句柄获取函数详解

vcmfc编程各种窗口句柄获取函数详解

AfxGetMainWndAfxGetMainWnd获取自身窗口句柄HWND hWnd = AfxGetMainWnd()->m_hWnd;GetT opWindow函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。

函数原型:HWND GetT opWindow(HWND hWnd);参数:hWnd:被查序的父窗口的句柄。

如果该参数为NULL,函数返回Z序顶部的窗口句柄。

返回值:如果函数成功,返回值为在Z序顶部的子窗口句柄。

如果指定的窗口无子窗口,返回值为NULL。

GetForegroundWindow函数功能:该函数返回当前系统的前台窗口的窗口句柄。

函数原型:HWND GetForegroundWindow(VOID)返回值:函数返回前台窗回的句柄。

GetActiveWindow函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。

函数原型:HWND GetActiveWindow(VOID)返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。

否则,返回值为NULL。

GetSafeHwnd函数功能:获取某个窗口对象(CWnd的派生对象)指针的句柄(H WND)时,最安全的方法是使用GetSafeHwnd()函数。

通过下面的例子来看其理由:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器HWND hwnd = pwnd->m_hwnd; //得到它的H WND这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULLIsWindowVisible函数功能:该函数获得给定窗口的可视状态。

mfc函数详解

mfc函数详解

mfc函数详解MFC(Microsoft Foundation Class)是一种面向对象的Windows应用程序框架,它是微软公司在Windows操作系统下的视窗类库,是Visual C++的一些类和函数的集合。

MFC的作用是提供一种高级的、面向对象的编程结构,让程序员更加容易地开发Windows应用程序。

下面是一些常用的MFC函数及其详解:1. AfxMessageBox函数原型:int AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0);函数作用:显示一个消息框,包含文本、标题和按钮。

参数解释:lpszText:要显示的消息文本。

nType:消息框类型,包括按钮以及图标等样式。

nIDHelp:帮助ID,用于消息框的帮助文件。

返回值:用户选择的按钮行为,如“取消”、“确定”等。

2. AfxGetMainWnd函数原型:CWnd* AfxGetMainWnd( );函数作用:获取当前线程的主窗口对象指针。

参数解释:无。

返回值:当前线程的主窗口对象指针。

3. CString.Format函数原型:int Format(LPCTSTR lpszFormat, ...);函数作用:根据格式控制符格式化字符串。

参数解释:lpszFormat:格式化字符串,格式控制符用“%”标识。

...:格式控制符中各个参数的值。

返回值:格式化后的字符串长度。

4. CListBox.SetCurSel函数原型:int SetCurSel(int nIndex);函数作用:设置列表框中当前选定项的索引。

参数解释:nIndex:要选定项的索引,从0开始。

返回值:如果设置成功,则返回新选定项的索引;否则,返回LB_ERR。

5. CEdit.SetWindowText函数原型:void SetWindowText(LPCTSTR lpszString); 函数作用:设置编辑框的文本内容。

如何获得窗口句柄(hwnd)和改变窗口属性

如何获得窗口句柄(hwnd)和改变窗口属性

1、对于一个窗口如何进行操作呢,首先要得到其使用句柄,我们可以用FindWindow()函数来获取当前窗口句柄,具体使用如下:HWND hFig = ::FindWindow(NULL,HWND);如果得到找到,则返回窗口的句柄,否则返回NULL。

当然我们可以使用SetWindowPos(HWND hWnd, HWND hWndIsertAfter, int X, int Y, int cx, int cy , UINT Uflags) 改变窗口的大小和位置,Uflags是标志窗口的显示属性,具体值可以是SWP_NOMOVE 、SWP_NOZORDER 、SWP_N OACTIVATE 、SWP_FRAMECHANGED等。

具体的调用实例如下:HWND hFig = ::FindWindow(NULL,"Fig No. 1"); //找到窗口,并返回窗口句柄if(hFig == NULL) {AfxMessageBox("未能产生Figure窗口,图形绘制失败!");return;} // 获取绘图区域的位置和大小RECT PlotRec;CWnd *PlotArea = GetDlgItem(IDC_PLOTAREA); // 获取绘图区域指针PlotArea->GetWindowRect(&PlotRec); // 将绘图区域矩形赋给定义矩形long Width = PlotRec.right - PlotRec.left; long Height = PlotRec.bottom - PlotRec.to p; // 获得绘图区域的宽和高// 设置Figure窗口为绘图区域窗口的子窗口并调整其位置::SetParent(hFig,PlotArea->GetSafeHwnd()); // 设置绘图区域窗口为Figure窗口的父窗口::SetWindowPos(hFig,NULL,1,1,Width,Height,SWP_NOZORDER | SWP_NOACTIVATE); // 设置绘图窗口的大小和位置// 设置窗口可见SetVisible(h_a,mwArray("ON"));// 进入窗口等待状态bWait = 1; mlfHGWaitForFiguresToDie();2、当然你想改变窗口属性的话,还可以增加以下函数来改变窗口的属性long lStyle. = ::GetWindowLong(hFig,GWL_STYLE);::SetWindowLong(hFig,GWL_STYLE,lStyle. & (~WS_CAPTION) & (~WS_THICKFRAM E));::SetWindowPos(hFig,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTI VATE | SWP_FRAMECHANGED);就写到这吧,其他的学会了再统一以一个实例的形式给出。

mfc 句柄的概念

mfc 句柄的概念

mfc 句柄的概念摘要:一、MFC 句柄的概念引入二、MFC 句柄的定义与作用1.定义2.作用三、MFC 句柄与Windows 句柄的关系四、MFC 句柄的常见类型1.窗口句柄2.菜单句柄3.控件句柄五、MFC 句柄的操作与应用1.获取句柄2.释放句柄3.使用句柄进行消息传递六、MFC 句柄在编程中的应用实例1.创建窗口2.处理用户输入3.更新界面显示正文:MFC(Microsoft Foundation Class)是微软提供的一套C++类库,用于简化Windows 应用程序的开发。

在MFC 中,句柄(Handle)是一个非常重要的概念,它贯穿于整个编程过程。

本篇文章将详细介绍MFC 句柄的概念、定义与作用,以及如何在编程中应用句柄。

首先,我们需要了解MFC 句柄的概念。

在MFC 中,句柄是一个指向对象或资源的非负整数。

它用于标识和操作Windows 中的各种资源,如窗口、菜单和控件等。

通过句柄,我们可以在程序中方便地访问和操作这些资源。

MFC 句柄的定义与作用可以从以下两点来理解:1.定义:MFC 句柄是一个非负整数,用于标识和操作Windows 中的资源。

2.作用:通过句柄,我们可以在程序中方便地访问和操作资源,实现消息传递、用户输入处理和界面更新等功能。

接下来,我们来看一下MFC 句柄与Windows 句柄的关系。

实际上,MFC 句柄是Windows 句柄的一种封装。

在MFC 中,我们通常使用MFC 类来创建和操作资源,而MFC 类会自动为我们生成对应的Windows 句柄。

这样,我们无需直接操作Windows API,就可以方便地使用句柄进行编程。

当然,在某些情况下,我们也可以直接使用Windows API 函数来操作句柄。

MFC 句柄的常见类型包括窗口句柄、菜单句柄和控件句柄。

这些句柄分别用于操作窗口、菜单和控件等资源。

在编程过程中,我们需要根据实际需求来选择合适的句柄类型,并进行相应的操作。

vc获取窗体句柄gethandle

vc获取窗体句柄gethandle

vc获得窗口句柄2008-01-1823:111.HWND FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName)HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpClassName,LPCTSTR lpWindowName)2.HWND WindowFromPoint(POINT&Point)3.4组语句BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)BOOL CALLBACK EnumChildWindows(HWND hWndParent,WNDENUMPROC lpEnumFunc,LPARAM lParam)BOOL CALLBACK EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam) BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)一般用途:对于第一种,大家都很熟悉,是捕捉句柄的常规武器,FindWindow这两兄弟,可以接受捕捉对象的类名或者窗口标题之一,作为参数,返回一个HWND。

可是对于一般群众,不一定知道所有的窗口(包括标题栏、按钮等等)的类名啊!——可以简单举例,请问你知道桌面图标的窗口的类名吗?而对于窗口标题,有可能会出现相同的标题,有两个窗口——指一个程序的两个进程,这又是个麻烦吧!好了,这个问题先放放,继续下一组。

第二组,通过win32定义的POINT结构(typedef struct tagPOINT{LONG x,LONG y;} POINT),来获得当前鼠标光标位置的窗口HWND,这是最直观的武器!常规操作如下:先得到Cursor的POINT(BOOL GetCursorPos(LPPOINT)函数),再用WindowFromPoint。

如何获得窗口句柄和改变窗口属性

如何获得窗口句柄和改变窗口属性

如何获得窗口句柄和改变窗口属性要获得窗口句柄(HWND),可以使用WinAPI中的FindWindow函数或FindWindowEx函数。

1. 使用FindWindow函数:```HWND hWnd = FindWindow(NULL, L"窗口标题");```这个函数会在当前活动的桌面窗口中查找指定标题的窗口,并返回窗口句柄。

2. 使用FindWindowEx函数:```HWND hParent = FindWindow(NULL, L"父窗口标题");HWND hWnd = FindWindowEx(hParent, NULL, NULL, L"子窗口标题");```这个函数会在指定父窗口中查找指定标题的子窗口,并返回子窗口句柄。

要改变窗口属性,可以使用WinAPI中的SetWindowLong函数或SetWindowPos函数。

1. 使用SetWindowLong函数:```LONG_PTR dwStyle = GetWindowLongPtr(hWnd, GWL_STYLE);dwStyle &= ~WS_CAPTION; // 移除标题栏SetWindowLongPtr(hWnd, GWL_STYLE, dwStyle);SetWindowPos(hWnd, NULL, x, y, width, height,SWP_FRAMECHANGED); // 重新绘制窗口```这个函数可以改变窗口的样式,如移除标题栏、调整窗口大小等。

2. 使用SetWindowPos函数:```SetWindowPos(hWnd, NULL, x, y, width, height,SWP_FRAMECHANGED);```这个函数可以重新设置窗口的位置、大小,并且可以实时更新窗口的样式。

需要注意的是,对于不属于当前进程创建的窗口,可能需要通过其他技术手段获取窗口句柄并改变属性,如使用钩子函数或其他进程间通信的方式。

MFC的窗口句柄

MFC的窗口句柄

MFC的窗⼝句柄1.窗⼝、控件的指针和句柄的相互转化1)指针转化为句柄在MFC应⽤程序中⾸先要获得窗⼝的指针,然后将其转化为句柄 CWnd* pWnd; HANDLE hWnd = pWnd->GetSafeHwnd();2)句柄转化为指针在MFC应⽤程序中⾸先获得对话框控件的句柄,然后获得其指针HANDLE hWnd;GetDlgItem(IDC_xxx,&hWnd);CWnd * pWnd = FromHandle(hWnd);获得程序窗⼝指针的办法:a.获得主框架窗⼝指针(任何时候都可以⽤,只要是MFC程序中):CWnd* pWnd = AfxGetMainWnd();b.获得对话框中控件指针:CWnd* pWnd = GetDlgItem(IDC_xxx);c.获得对话框中某控件的句柄:HANDLE GetDlgItem(m_hDLG,m_nID_DlgItem);d.获得GDI对象的句柄:HANDLE m_hGDIObj = m_pGDIObj->GetSafeHanle();2. 如何获取应⽤程序的实例句柄?AfxGetInstanceHandle()应⽤程序的实例句柄保存在CWinAppIm_hInstance 中,可以这么调⽤ AfxGetInstancdHandle获得句柄;Example: HANDLE hInstance=AfxGetInstanceHandle();3. 如何通过代码获得应⽤程序主窗⼝的指针?AfxGetMainWnd GetSafeHwnd() AfxGetAppName() AfxGetThread主窗⼝的指针保存在CWinThread::m_pMainWnd中,调⽤ AfxGetMainWnd实现。

【例】 AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程序最⼤化.【例】此例的主窗⼝是对话框,下⾯的代码是在另外⼀个CFileTreeCtrl 类(⼦窗)中相关函数实现在主对话框(主窗)中的⼏个静态⽂本框(⼦窗)中显⽰路径:CWnd* m_pCWnd= AfxGetMainWnd(); //得到主窗⼝指针,通过主窗指针访问其他⼦窗资源//⽅法⼀m_pCWnd->SetDlgItemText(IDC_STATIC_path,"CWnd* "+m_sCurPath); //在主窗中的⼦窗(ID:IDC_STATIC_path)中显⽰字符串m_pCWnd->SetDlgItemText(IDC_STATIC_who,"路径显⽰由FileTreeCtrl类完成:");//⽅法⼆m_pCWnd->SendMessage(STN_CLICKED); //向主窗⼝发送⼀个消息,显⽰任务由主窗完成。

如何通过句柄获取外部程序的窗口的内容

如何通过句柄获取外部程序的窗口的内容

如何通过句柄获取外部程序的窗口的内容要通过句柄获取外部程序的窗口内容,可以使用Windows API函数来实现。

具体步骤如下:
1. 使用Windows API函数`FindWindow`或`FindWindowEx`来查找目标窗口的句柄。

`FindWindow`可以根据窗口类名或窗口标题查找句柄,`FindWindowEx`可以根据父窗口句柄和窗口类名查找句柄。

如果获取到了目标窗口的句柄,继续下一步;否则,表示未找到目标窗口。

2. 使用Windows API函数`GetWindowTextLength`和
`GetWindowText`来获取目标窗口的文本内容。

`GetWindowTextLength`用于获取文本内容的长度,`GetWindowText`用于获取实际文本内容。

可以先使用`GetWindowTextLength`来获取文本长度,然后创建一个对应长度的缓冲区,再使用`GetWindowText`来获取文本内容。

3. 可以使用其他Windows API函数来获取窗口的其他信息,如
`GetClassName`获取窗口的类名,`GetWindowRect`获取窗口的位置和大小等。

需要注意的是,使用Windows API函数需要导入`user32.dll`库,并且可以使用C++、C#、Python等编程语言进行开发。

使用不同编程语言,具体API函数的调用方式会有所差异。

如何获得窗口句柄和改变窗口属性

如何获得窗口句柄和改变窗口属性

如何获得窗口句柄和改变窗口属性
要获得窗口句柄(HWND),可以使用FindWindow函数或者FindWindowEx函数。

这两个函数都需要传入窗口类名(可以为空)和窗
口标题(可以为空),通过这两个参数来定位窗口。

例如,下面的代码展示了如何使用FindWindow函数来获取窗口句柄:```c++
HWND hwnd = FindWindow(NULL, "窗口标题");
if (hwnd != NULL)
//找到窗口了,可以继续进行操作
} else
//没有找到窗口
```
要改变窗口属性,可以使用SetWindowLong或者SetWindowPos函数。

SetWindowLong函数允许你改变窗口的样式、扩展样式和用户数据。

SetWindowPos函数允许你改变窗口的位置和大小。

例如,下面的代码展示了如何使用SetWindowPos函数来改变窗口大
小和位置:
```c++
HWND hwnd = FindWindow(NULL, "窗口标题");
if (hwnd != NULL)
//改变窗口大小和位置
SetWindowPos(hwnd, NULL, x, y, width, height, SWP_NOZORDER);
} else
//没有找到窗口
```
上面的代码中,x和y是窗口的新位置,width和height是窗口的新大小。

SWP_NOZORDER参数表示不改变窗口的Z顺序(即不改变窗口的层次关系)。

MFC中获得各个类的指针句柄 ID总结

MFC中获得各个类的指针句柄 ID总结

一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题。

下面这节内容主要是一般的框架,然后再讲多线程中的指针使用。

使用到的类需要包含响应的头文件。

首先一般获得本类(视,文档,对话框都支持)实例指针this,用this的目的,主要可以通过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的功能。

这其中的关键在于理解m_pMainWnd,AfxGetApp(),AfxGetMainWnd() 的意义!1)在View中获得Doc指针CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。

2) 在App中获得MainFrame指针CWinApp 中的m_pMainWnd变量就是MainFrame的指针,也可以:CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd(); 3) 在View中获得MainFrame指针CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;4) 获得View(已建立)指针CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;CyouView *pView=(CyouView *)pMain->GetActiveView();5) 获得当前文档指针CDocument * pCurrentDoc =(CFrameWnd *)m_pMainWnd->GetActiveDocument();6) 获得状态栏与工具栏指针CStatusBar * pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);CToolBar * pToolBar=(CtoolBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);7) 如果框架中加入工具栏和状态栏变量还可以这样(CMainFrame *)GetParent()->m_wndToolBar;(CMainFrame *)GetParent()->m_wndStatusBar;8) 在Mainframe获得菜单指针CMenu *pMenu=m_pMainWnd->GetMenu();9) 在任何类中获得应用程序类AfxGetInstanceHandle 得到句柄,AfxGetApp 得到指针B1.如何在自己的类和“应用程序类”中获得“文档类”的句柄?SDI AfxGetMainWnd() -> GetActiveView() -> GetDocument() 得到指针MDI AfxGetMainWnd() -> MDIGetActive() -> GetActiveView() -> GetDocument() 得到指针B3.如何在“框架类”中获得“文档类”句柄?SDI GetActiveView() -> GetDocument() 得到指针,MDI MDIGetActive() -> GetActiveView() -> GetDocument() 从CMainFrame 得到指针,GetActiveView() -> GetDocument() 从CChildFrame 得到指针B4.如何在“视图类”中获得“文档类”句柄?GetDocument()C1.如何在“文档类”中获得“视图类”句柄?GetView(),调用GetFirstViewPosition 和GetNextView 函数得到指针。

mfc获取控件句柄

mfc获取控件句柄

mfc获取控件句柄1. 什么是MFC?MFC是Microsoft Foundation Classes的缩写,是一种用于创建Windows应用程序的C++类库。

在MFC中,开发者可以使用各种控件来创建图形用户界面,例如按钮、文本框、列表框等。

2. MFC获取控件句柄的方法获取控件句柄是MFC编程中常用的操作,因为控件句柄可以用来访问控件的各种属性和方法。

在MFC中,获取控件句柄有两种方法: 2.1 使用GetDlgItem函数GetDlgItem函数是MFC中获取控件句柄的标准方法,可以用于任何类型的控件。

该函数原型如下:```cppCWnd* GetDlgItem(int nID);```其中,nID为控件的ID值,可以用控件资源中的ID或者CreateWindow时传入的ID。

该函数返回值为CWnd类型的指针,表示指向控件的窗口类对象。

例如,以下代码获取按钮控件的句柄:```cpp// 获取按钮控件的句柄CWnd* pBtn = GetDlgItem(IDC_BTN_OK);```2.2 使用类成员变量除了使用GetDlgItem函数,还可以通过类成员变量来获取控件句柄。

在MFC中,类成员变量有一个命名规则,即以m_开头,然后跟上控件的ID值。

例如,如果一个按钮的ID为IDC_BTN_OK,那么可以定义如下成员变量:```cppCButton m_btnOK;```在类构造函数中,可以调用以下代码将该成员变量与控件关联起来:```cpp// 关联按钮控件m_btnOK.SubclassDlgItem(IDC_BTN_OK, this);```这样,就可以通过该成员变量来访问该按钮控件的各种属性和方法了。

例如,以下代码将该按钮的文本设置为“确定”:```cpp// 设置按钮文本m_btnOK.SetWindowText(_T("确定"));```3. 总结MFC是一种常用的Windows应用程序开发框架,其提供了各种控件来创建界面,常常需要获取控件句柄来访问控件的属性和方法。

mfc获取当前阻塞界面的句柄

mfc获取当前阻塞界面的句柄

一、介绍MFC及其用途MFC(Microsoft Foundation Class)是一种基于C++的面向对象的编程框架,是Microsoft Visual C++的重要组成部分。

它为Windows应用程序的开发提供了一套丰富的类库和工具,使得开发者能够更轻松地创建具有丰富用户界面和功能的Windows应用程序。

二、阻塞界面及其概念阻塞界面是指在程序执行某些任务时,由于任务本身的复杂性或者依赖关系,导致用户界面被阻塞,用户无法进行其他操作的界面状态。

在实际开发中,我们常常需要获取当前阻塞界面的句柄,以便对其进行处理或者优化。

三、MFC如何获取当前阻塞界面的句柄在MFC中,要获取当前阻塞界面的句柄,可以使用以下方法:1. 通过GetSafeHwnd函数获取当前窗口的句柄MFC提供了GetSafeHwnd函数来获取当前窗口的句柄,这是一种常见的获取当前阻塞界面句柄的方式。

通过调用GetSafeHwnd函数,可以直接获取当前窗口的句柄,从而进行后续的处理。

2. 通过EnumThreadWindows函数枚举线程中的所有窗口如果无法直接获取当前阻塞界面的句柄,可以通过调用EnumThreadWindows函数来枚举线程中的所有窗口,然后根据具体的条件来判断哪个窗口是阻塞界面,并获取其句柄。

3. 通过Windows消息钩子来获取窗口句柄使用Windows消息钩子可以实现对窗口消息的监控和拦截,从而获取当前阻塞界面的句柄。

通过设置钩子函数,并在其中对窗口进行处理,可以实现对阻塞界面句柄的获取。

四、处理获取到的阻塞界面句柄一旦获取到了当前阻塞界面的句柄,开发者可以根据具体的需求进行处理。

可能的处理方式包括但不限于:1. 优化界面交互体验通过获取阻塞界面的句柄,开发者可以针对性地对界面进行优化,提升用户的交互体验。

在界面阻塞时显示进度条或者提示信息,告知用户当前任务正在进行中,以减轻用户的焦虑和不适。

2. 界面异常处理有时阻塞界面可能是由于程序出现异常或错误导致的,通过获取界面句柄,开发者可以及时将异常信息显示给用户,或者进行异常处理,保证程序的稳定性和健壮性。

VC这MFC所有WM消息和数据类型总结

VC这MFC所有WM消息和数据类型总结

hwnd 32位的窗口句柄。

窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。

message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。

wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。

lParam 通常是一个指向内存中数据的指针。

由于WParam、lParam和Pointer 都是32位的,因此,它们之间可以相互转换。

WM_NULL =$0000 //WM_CREATE =$0001 //应用程序创建一个窗口WM_DESTROY = $0002 //一个窗口被销毁WM_MOVE = $0003 //移动一个窗口WM_SIZE= $0005 //改变一个窗口的大小WM_ACTIVATE= $0006 //一个窗口被激活或失去激活状态;WM_SETFOCUS= $0007 //获得焦点后WM_KILLFOCUS= $0008 //失去焦点WM_ENABLE= $000A //改变enable状态WM_SETREDRAW= $000B //设置窗口是否能重画WM_SETTEXT= $000C //应用程序发送此消息来设置一个窗口的文本WM_GETTEXT = $000D //应用程序发送此消息来复制对应窗口的文本到缓冲区WM_GETTEXTLENGTH = $000E //得到与一个窗口有关的文本的长度(不包含空字符)WM_PAINT = $000F //要求一个窗口重画自己WM_CLOSE = $0010 //当一个窗口或应用程序要关闭时发送一个信号WM_QUERYENDSESSION= $0011 //当用户选择结束对话框或程序自己调用ExitWindows函数WM_QUIT= $0012 //用来结束程序运行或当程序调用postquitmessage函数WM_QUERYOPEN = $0013 //当用户窗口恢复以前的大小位置时,把此消息发送给某个图标WM_ERASEBKGND = $0014 //当窗口背景必须被擦除时(例在窗口改变大小时)WM_SYSCOLORCHANGE = $0015 //当系统颜色改变时,发送此消息给所有顶级窗口WM_ENDSESSION = $0016 // 当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束WM_SYSTEMERROR = $0017 //WM_SHOWWINDOW= $0018 //当隐藏或显示窗口是发送此消息给这个窗口WM_ACTIVATEAPP = $001C //发此消息给应用程序哪个窗口是激活的,哪个是非激活的;WM_FONTCHANGE= $001D //当系统的字体资源库变化时发送此消息给所有顶级窗口WM_TIMECHANGE= $001E //当系统的时间变化时发送此消息给所有顶级窗口WM_CANCELMODE= $001F //发送此消息来取消某种正在进行的摸态(操作)WM_SETCURSOR = $0020 //如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口WM_MOUSEACTIVATE = $0021 //当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口WM_CHILDACTIVATE = $0022 //发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小WM_QUEUESYNC= $0023 //此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序分离出用户输入消息WM_GETMINMAXINFO= $0024 //此消息发送给窗口当它将要改变大小或位置;WM_PAINTICON = $0026 //发送给最小化窗口当它图标将要被重画WM_ICONERASEBKGND = $0027 //此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画WM_NEXTDLGCTL = $0028 //发送此消息给一个对话框程序去更改焦点位置WM_SPOOLERSTATUS= $002A //每当打印管理列队增加或减少一条作业时发出此消息WM_DRAWITEM= $002B //当button,combobox,listbox,menu的可视外观改变时发送此消息给这些空件的所有者WM_MEASUREITEM= $002C //当button, combo box, list box, list view control, or menu item 被创建时发送此消息给控件的所有者WM_DELETEITEM = $002D // 当the list box 或combo box 被销毁或当某些项被删除通过LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT 消息WM_VKEYTOITEM = $002E //此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息WM_CHARTOITEM = $002F //此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息WM_SETFONT= $0030 //当绘制文本时程序发送此消息得到控件要用的颜色WM_GETFONT= $0031 //应用程序发送此消息得到当前控件绘制文本的字体WM_SETHOTKEY= $0032 //应用程序发送此消息让一个窗口与一个热键相关连WM_GETHOTKEY= $0033 //应用程序发送此消息来判断热键与某个窗口是否有关联WM_QUERYDRAGICON= $0037 //此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标WM_COMPAREITEM= $0039 //发送此消息来判定combobox或listbox新增加的项的相对位置WM_GETOBJECT= $003D //WM_COMPACTING = $0041 //显示内存已经很少了WM_WINDOWPOSCHANGING = $0046 //发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数WM_WINDOWPOSCHANGED = $0047 //发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数WM_POWER= $0048 //(适用于16位的windows)当系统将要进入暂停状态时发送此消息WM_COPYDATA = $004A //当一个应用程序传递数据给另一个应用程序时发送此消息WM_CANCELJOURNAL= $004B //当某个用户取消程序日志激活状态,提交此消息给程序WM_NOTIFY = $004E //当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口WM_INPUTLANGCHANGEREQUEST = $0050 //当用户选择某种输入语言,或输入语言的热键改变WM_INPUTLANGCHANGE= $0051 //当平台现场已经被改变后发送此消息给受影响的最顶级窗口WM_TCARD= $0052 //当程序已经初始化windows帮助例程时发送此消息给应用程序WM_HELP = $0053 //此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口WM_USERCHANGED= $0054 //当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息;WM_NOTIFYformAT = $0055 //公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构在WM_NOTIFY消息,使用此控件能使某个控件与它的父控件之间进行相互通信WM_CONTEXTMENU= $007B //当用户某个窗口中点击了一下右键就发送此消息给这个窗口WM_styleCHANGING= $007C //当调用SETWINDOWLONG函数将要改变一个或多个窗口的风格时发送此消息给那个窗口WM_styleCHANGED = $007D //当调用SETWINDOWLONG函数一个或多个窗口的风格后发送此消息给那个窗口WM_DISPLAYCHANGE= $007E //当显示器的分辨率改变后发送此消息给所有的窗口WM_GETICON= $007F //此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄;WM_SETICON= $0080 //程序发送此消息让一个新的大图标或小图标与某个窗口关联;WM_NCCREATE = $0081 //当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送;WM_NCDESTROY= $0082 //此消息通知某个窗口,非客户区正在销毁WM_NCCALCSIZE = $0083 //当某个窗口的客户区域必须被核算时发送此消息WM_NCHITTEST= $0084 //移动鼠标,按住或释放鼠标时发生WM_NCPAINT= $0085 //程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时;WM_NCACTIVATE= $0086 //此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态;WM_GETDLGCODE= $0087 //发送此消息给某个与对话框程序关联的控件,widdows 控制方位键和TAB键使输入进入此控件通过响应WM_GETDLGCODE消息,应用程序可以把他当成一个特殊的输入控件并能处理它WM_NCMOUSEMOVE = $00A0 //当光标在一个窗口的非客户区内移动时发送此消息给这个窗口//非客户区为:窗体的标题栏及窗的边框体WM_NCLBUTTONDOWN= $00A1 //当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息WM_NCLBUTTONUP= $00A2 //当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息;WM_NCLBUTTONDBLCLK= $00A3 //当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息WM_NCRBUTTONDOWN= $00A4 //当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息WM_NCRBUTTONUP= $00A5 //当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息WM_NCRBUTTONDBLCLK= $00A6 //当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息WM_NCMBUTTONDOWN= $00A7 //当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息WM_NCMBUTTONUP= $00A8 //当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息WM_NCMBUTTONDBLCLK= $00A9 //当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息WM_KEYFIRST = $0100 //WM_KEYDOWN= $0100 //按下一个键WM_KEYUP= $0101 //释放一个键WM_CHAR = $0102 //按下某键,并已发出WM_KEYDOWN,WM_KEYUP消息WM_DEADCHAR = $0103 //当用translatemessage函数翻译WM_KEYUP消息时发送此消息给拥有焦点的窗口WM_SYSKEYDOWN = $0104 //当用户按住ALT键同时按下其它键时提交此消息给拥有焦点的窗口;WM_SYSKEYUP = $0105 //当用户释放一个键同时ALT 键还按着时提交此消息给拥有焦点的窗口WM_SYSCHAR= $0106 //当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后提交此消息给拥有焦点的窗口WM_SYSDEADCHAR= $0107 //当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点的窗口WM_KEYLAST= $0108 //WM_INITDIALOG = $0110 //在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务WM_COMMAND= $0111 //当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译WM_SYSCOMMAND = $0112 //当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息WM_TIMER= $0113 //发生了定时器事件WM_HSCROLL= $0114 //当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件WM_VSCROLL= $0115 //当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件WM_INITMENU = $0116 //当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单WM_INITMENUPOPUP= $0117 //当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部WM_MENUSELECT = $011F //当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)WM_MENUCHAR = $0120 //当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者;WM_ENTERIDLE= $0121 //当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待WM_MENURBUTTONUP= $0122 //WM_MENUDRAG = $0123 //WM_MENUGETOBJECT= $0124 //WM_UNINTMENUPOPUP= $0125 //WM_MENUCOMMAND= $0126 //WM_CHANGEUISTATE= $0127 //WM_UPDATEUISTATE= $0128 //WM_QUERYUISTATE = $0129 //WM_CTLCOLORMSGBOX = $0132 //在windows绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色WM_CTLCOLOREDIT = $0133 //当一个编辑型控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色WM_CTLCOLORLISTBOX= $0134 //当一个列表框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色WM_CTLCOLORBTN= $0135 //当一个按钮控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色WM_CTLCOLORDLG= $0136 //当一个对话框控件将要被绘制前发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色WM_CTLCOLORSCROLLBAR= $0137 //当一个滚动条控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色WM_CTLCOLORSTATIC = $0138 //当一个静态控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色WM_MOUSEFIRST = $0200 //WM_MOUSEMOVE= $0200 //移动鼠标WM_LBUTTONDOWN= $0201 //按下鼠标左键WM_LBUTTONUP= $0202 //释放鼠标左键WM_LBUTTONDBLCLK= $0203 //双击鼠标左键WM_RBUTTONDOWN= $0204 //按下鼠标右键WM_RBUTTONUP= $0205 //释放鼠标右键WM_RBUTTONDBLCLK= $0206 //双击鼠标右键WM_MBUTTONDOWN= $0207 //按下鼠标中键WM_MBUTTONUP= $0208 //释放鼠标中键WM_MBUTTONDBLCLK= $0209 //双击鼠标中键WM_MOUSEWHEEL = $020A //当鼠标轮子转动时发送此消息个当前有焦点的控件WM_MOUSELAST= $020A //WM_PARENTNOTIFY = $0210 //当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时发送此消息给它的父窗口WM_ENTERMENULOOP= $0211 //发送此消息通知应用程序的主窗口that已经进入了菜单循环模式WM_EXITMENULOOP = $0212 //发送此消息通知应用程序的主窗口that已退了菜单循环模式WM_NEXTMENU = $0213 //WM_SIZING = 532 //当用户正在调整窗口大小时发送此消息给窗口;通过此消息应用程序可以监视窗口大小和位置也可以修改他们WM_CAPTURECHANGED = 533 //发送此消息给窗口当它失去捕获的鼠标时;WM_MOVING = 534 //当用户在移动窗口时发送此消息,通过此消息应用程序可以监视窗口大小和位置也可以修改他们;WM_POWERBROADCAST = 536 //此消息发送给应用程序来通知它有关电源管理事件;WM_DEVICECHANGE = 537 //当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序WM_IME_STARTCOMPOSITION= $010D //WM_IME_ENDCOMPOSITION= $010E //WM_IME_COMPOSITION = $010F //WM_IME_KEYLAST = $010F //WM_IME_SETCONTEXT= $0281 //WM_IME_NOTIFY= $0282 //WM_IME_CONTROL = $0283 //WM_IME_COMPOSITIONFULL = $0284 //WM_IME_SELECT= $0285 //WM_IME_CHAR= $0286 //WM_IME_REQUEST = $0288 //WM_IME_KEYDOWN = $0290 //WM_IME_KEYUP = $0291 //WM_MDICREATE= $0220 //应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口WM_MDIDESTROY = $0221 //应用程序发送此消息给多文档的客户窗口来闭一个MDI 子窗口WM_MDIACTIVATE= $0222 //应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)激活它;WM_MDIRESTORE = $0223 //程序发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小WM_MDINEXT= $0224 //程序发送此消息给MDI客户窗口激活下一个或前一个窗口WM_MDIMAXIMIZE= $0225 //程序发送此消息给MDI客户窗口来最大化一个MDI 子窗口;WM_MDITILE= $0226 //程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口WM_MDICASCADE = $0227 //程序发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口WM_MDIICONARRANGE = $0228 //程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口WM_MDIGETACTIVE = $0229 //程序发送此消息给MDI客户窗口来找到激活的子窗口的句柄WM_MDISETMENU = $0230 //程序发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单WM_ENTERSIZEMOVE= $0231 //WM_EXITSIZEMOVE = $0232 //WM_DROPFILES= $0233 //WM_MDIREFRESHMENU = $0234 //WM_MOUSEHOVER = $02A1 //WM_MOUSELEAVE = $02A3 //WM_CUT= $0300 //程序发送此消息给一个编辑框或combobox来删除当前选择的文本WM_COPY = $0301 //程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板WM_PASTE= $0302 //程序发送此消息给editcontrol或combobox从剪贴板中得到数据WM_CLEAR= $0303 //程序发送此消息给editcontrol或combobox清除当前选择的内容;WM_UNDO = $0304 //程序发送此消息给editcontrol或combobox撤消最后一次操作WM_RENDERformAT = $0305;//WM_RENDERALLformATS = $0306 //WM_DESTROYCLIPBOARD = $0307 //当调用ENPTYCLIPBOARD函数时发送此消息给剪贴板的所有者WM_DRAWCLIPBOARD= $0308 //当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口;它允许用剪贴板观察窗口来显示剪贴板的新内容;WM_PAINTCLIPBOARD = $0309 //当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画;WM_VSCROLLCLIPBOARD = $030A //WM_SIZECLIPBOARD= $030B //当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者;WM_ASKCBformATNAME= $030C //通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字WM_CHANGECBCHAIN= $030D //当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口;WM_HSCROLLCLIPBOARD = $030E //此消息通过一个剪贴板观察窗口发送给剪贴板的所有者;它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上;所有者应滚动剪贴板图象并更新滚动条的值;WM_QUERYNEWPALETTE= $030F //此消息发送给将要收到焦点的窗口,此消息能使窗口在收到焦点时同时有机会实现他的逻辑调色板WM_PALETTEISCHANGING= $0310 //当一个应用程序正要实现它的逻辑调色板时发此消息通知所有的应用程序WM_PALETTECHANGED = $0311 //此消息在一个拥有焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口,以此来改变系统调色板WM_HOTKEY = $0312 //当用户按下由REGISTERHOTKEY函数注册的热键时提交此消息WM_PRINT= 791 //应用程序发送此消息仅当WINDOWS或其它应用程序发出一个请求要求绘制一个应用程序的一部分;WM_PRINTCLIENT= 792 //WM_HANDHELDFIRST= 856 //WM_HANDHELDLAST = 863 //WM_PENWINFIRST= $0380 //WM_PENWINLAST = $038F //WM_COALESCE_FIRST = $0390 //WM_COALESCE_LAST= $039F //WM_DDE_FIRST= $03E0 //WM_DDE_INITIATE = WM_DDE_FIRST 0 //一个DDE客户程序提交此消息开始一个与服务器程序的会话来响应那个指定的程序和主题名;WM_DDE_TERMINATE= WM_DDE_FIRST 1 //一个DDE应用程序(无论是客户还是服务器)提交此消息来终止一个会话;WM_DDE_ADVISE = WM_DDE_FIRST 2 //一个DDE客户程序提交此消息给一个DDE 服务程序来请求服务器每当数据项改变时更新它WM_DDE_UNADVISE = WM_DDE_FIRST 3 //一个DDE客户程序通过此消息通知一个DDE服务程序不更新指定的项或一个特殊的剪贴板格式的项WM_DDE_ACK= WM_DDE_FIRST 4 //此消息通知一个DDE(动态数据交换)程序已收到并正在处理WM_DDE_POKE, WM_DDE_EXECUTE, WM_DDE_DATA, WM_DDE_ADVISE, WM_DDE_UNADVISE, or WM_DDE_INITIAT消息WM_DDE_DATA = WM_DDE_FIRST 5 //一个DDE服务程序提交此消息给DDE客户程序来传递个一数据项给客户或通知客户的一条可用数据项WM_DDE_REQUEST= WM_DDE_FIRST 6 //一个DDE客户程序提交此消息给一个DDE 服务程序来请求一个数据项的值;WM_DDE_POKE = WM_DDE_FIRST 7 //一个DDE客户程序提交此消息给一个DDE服务程序,客户使用此消息来请求服务器接收一个未经同意的数据项;服务器通过答复WM_DDE_ACK消息提示是否它接收这个数据项;WM_DDE_EXECUTE= WM_DDE_FIRST 8 //一个DDE客户程序提交此消息给一个DDE 服务程序来发送一个字符串给服务器让它象串行命令一样被处理,服务器通过提交WM_DDE_ACK消息来作回应;WM_DDE_LAST = WM_DDE_FIRST 8 //WM_APP = $8000 //WM_USE = $0400 //此消息能帮助应用程序自定义私有消息;///////////////////////////////////////////////////////////////////// 通知消息(Notification message)是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通知父窗口。

VC窗口处理函数

VC窗口处理函数

VC窗口处理函数1.HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HANDLE hlnstance,LPVOID lpParam);参数lpClassName指向一个空结束的字符串或整型数atom。

如果该参数是一个整型量,它是由此前调用theGlobalAddAtom函数产生的全局量。

这个小于0xC000的16位数必须是lpClassName参数字的低16位,该参数的高位必须是0。

如果lpClassName是一个字符串,它指定了窗口的类名。

这个类名可以是任何用函数RegisterClassEx注册的类名,或是任何预定义的控制类名。

请看说明部分的列表。

LPWindowName指向一个指定窗口名的空结束的字符串指针。

如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。

当使用Createwindow函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。

dwStyle指定创建窗口的风格。

该参数可以是下列窗口风格的组合再加上说明部分的控制风格。

风格意义:WS_BORDER:创建一个单边框的窗口。

WS_CAPTION:创建一个有标题框的窗口(包括WS_BODER风格)。

WS_CHILD:创建一个子窗口。

这个风格不能与WS_POPUP风格合用。

WS_CHLDWINDOW:与WS_CHILD相同。

WS_CLIPCHILDREN:当在父窗口内绘图时,排除子窗口区域。

在创建父窗口时使用这个风格。

WS_CLlPBLINGS;排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到WM_PAINT消息时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口。

dll中如何得到一个对话框的句柄-VCMFC基础类

dll中如何得到一个对话框的句柄-VCMFC基础类

dll中如何得到一个对话框的句柄-VCMFC基础类从MFC扩展动态链接库中输出对话框似乎是很容易的.你仅需要将相应类用AFX_EXT_CLASS输出即可。

如果你用一个应用程序和一个动态链接库建立或许会成功。

但是如果你在应用程序和DLL中都插入更多的资源,你将会得到严重错误。

原因如下:表示一个指定资源的正常途径是用它的ID。

ID是一个用资源编辑器定义的整型常量。

现在,假定你已有一个资源(是字符串)命名为ID_MY_TEXT.CString strText;strText.LoadString( ID_MY_TEXT );afxDump < < strText;上述代码将字符串输出到调试窗口。

有时你可能得到一个错误,而且它只发生在如果文本在一个MFC的扩展动态链接库里。

错误的原因在于应用程序获取一个资源的途径。

因为应用程序和动态链接库都有一个资源文件。

不同的资源ID有可能一样(以为VC资源编辑器为每个模块确定ID的起始编号方式)。

你可能认为在你的应用程序里搜索一个资源的顺序是首先为应用程序,而后为你的DLL。

我们需要改变搜索资源的顺序。

在本站有其他文章详细讲述了从DLL中输出对话框。

但是它只能工作在正规的MFC动态链接库中。

我写了一个类(在DLL的MAIN和对话框中有一些改变),允许你在任何你喜欢的地方调用你的对话框,就象:CMyApp::OnDLLDialog(){CDLLDialog dlg;dlg.DoModal();}我写了一个简单的类,在类的构造函数中设置动态链接库的资源句柄,在析构函数中设置先前的句柄。

/////////////////////////////////////////////////////////////////// //////////////////////////// File ExtDllState.h/////////////////////////////////////////////////////////////////// /////////////////////////#ifndef __EXTDLLSTATE_H__#define __EXTDLLSTATE_H__class CEXTDLLState{public:CEXTDLLState();~CEXTDLLState();protected:HINSTANCE m_hInstOld;};#endif/////////////////////////////////////////////////////////////////// /////////////////////////File ExtDllState.cpp/////////////////////////////////////////////////////////////////// /////////////////////////CEXTDLLState::CEXTDLLState(){m_hInstOld = AfxGetResourceHandle();AfxSetResourceHandle(extensionDLL.hModule);}CEXTDLLState::~CEXTDLLState(){AfxSetResourceHandle(m_hInstOld);}/////////////////////////////////////////////////////////////////// ///////////////////你可能看它很短小,但是却能做很多工作:复制上面的类代码到ExDllState.h和ExtDllState.cpp中,将两个文件放入公有的Include目录下,使得每个项目找到它。

c#获取当前活动窗口句柄,获取窗口大小及位置

c#获取当前活动窗口句柄,获取窗口大小及位置

c#获取当前活动窗口句柄,获取窗口大小及位置需调用API函数需在开头引入命名空间using System.Runtime.InteropServices;获取当前窗口句柄:GetForegroundWindow()[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]public static extern IntPtr GetForegroundWindow();返回值类型是IntPtr,即为当前获得焦点窗口的句柄使用方法 : IntPtr myPtr=GetForegroundWindow();获取到该窗口句柄后,可以对该窗口进行操作.比如,关闭该窗口或在该窗口隐藏后,使其显示[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);其中ShowWindow(IntPtr hwnd, int nCmdShow);nCmdShow的含义0 关闭窗口1 正常大小显示窗口2 最小化窗口3 最大化窗口使用实例: ShowWindow(myPtr, 0);获取窗口大小及位置:需要调用方法GetWindowRect(IntPtr hWnd, ref RECT lpRect)[DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);[StructLayout(LayoutKind.Sequential)]public struct RECT{public int Left; //最左坐标public int Top; //最上坐标public int Right; //最右坐标public int Bottom; //最下坐标}示例:InPtr awin = GetForegroundWindow(); //获取当前窗口句柄RECT rect = new RECT();GetWindowRect(awin, ref rect);int width = rc.Right - rc.Left; //窗口的宽度int height = rc.Bottom - rc.Top; //窗口的高度int x = rc.Left;int y = rc.T op;。

mfc getparent函数

mfc getparent函数

mfc getparent函数MFC的GetParent函数是一种用于获取窗口的父窗口句柄的函数。

在MFC(Microsoft Foundation Class)框架中,窗口是GUI应用程序的基本组成部分,而父窗口则是指定窗口的上一级窗口。

通过GetParent函数,我们可以方便地获取当前窗口的父窗口句柄,进而对父窗口进行操作或者获取父窗口的相关属性。

在MFC中,每个窗口都有一个唯一的标识符,称为句柄(Handle)。

这个句柄是一个指向窗口的指针,通过使用这个句柄,我们可以对窗口进行各种操作,比如改变窗口的位置、大小,或者发送消息给窗口。

GetParent函数就是用来获取当前窗口的父窗口句柄的。

在使用GetParent函数时,我们只需要简单地调用该函数,并传入当前窗口的句柄作为参数即可。

GetParent函数会返回当前窗口的父窗口句柄。

如果当前窗口没有父窗口,则返回值为NULL。

通过获取父窗口句柄,我们可以进一步对父窗口进行操作,比如改变父窗口的属性、获取父窗口的子窗口列表等。

GetParent函数的使用非常灵活,在不同的情况下可以有不同的用途。

比如,在一个多文档界面(MDI)应用程序中,我们可以使用GetParent函数来获取当前活动文档窗口的父窗口,然后对父窗口进行操作,比如关闭父窗口或者切换到其他父窗口。

除了GetParent函数外,MFC还提供了其他一些相关的函数,比如GetAncestor函数和GetTopLevelParent函数。

GetAncestor函数可以获取当前窗口的祖先窗口句柄,即指定窗口的上级窗口或者更上层的窗口。

GetTopLevelParent函数则可以获取当前窗口的顶级父窗口句柄,即指定窗口的最上层的窗口。

总结一下,MFC的GetParent函数是一种用于获取当前窗口的父窗口句柄的函数。

通过调用该函数,我们可以方便地获取父窗口的句柄,并对父窗口进行各种操作。

在实际的应用程序开发中,GetParent函数是一个非常常用的函数,可以帮助我们更好地管理和操作窗口。

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

AfxGetMainWnd
AfxGetMainWnd获取自身窗口句柄
HWND hWnd = AfxGetMainWnd()->m_hWnd;
GetTopWindow
函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。

函数原型:HWND GetTopWindow(HWND hWnd);
参数:
hWnd:被查序的父窗口的句柄。

如果该参数为NULL,函数返回Z序顶部的窗口句柄。

返回值:
如果函数成功,返回值为在Z序顶部的子窗口句柄。

如果指定的窗口无子窗口,返回值为NULL。

GetForegroundWindow
函数功能:该函数返回当前系统的前台窗口的窗口句柄。

函数原型:HWND GetForegroundWindow(VOID)
返回值:函数返回前台窗回的句柄。

GetActiveWindow
函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。

函数原型:HWND GetActiveWindow(VOID)
返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。

否则,返回值为NULL。

GetSafeHwnd
函数功能:获取某个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数。

通过下面的例子来看其理由:
CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
HWND hwnd = pwnd->m_hwnd; //得到它的HWND
这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND
就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULL
IsWindowVisible
函数功能:该函数获得给定窗口的可视状态。

函数原型:BOOL IsWindowVisible(HWND hWnd);
参数;
hWnd:被测试窗口的句柄。

返回值:
如果指定的窗口及其父窗口具有WS_VISIBLE风格,返回值为非零;如果指定的窗口及其父窗口不具有WS_VISIBLE风格,返回值为零。

由于返回值表明了窗口是否具有Ws_VISIBLE风格,因此,即使该窗口被其他窗口遮盖,函数返回值也为非零。

备注:
窗口的可视状态由WS_VISIBLE位指示。

当设置了WS_VISIBLE位,窗口就可显示,而且只要窗口具有WS_VISIBLE风格,任何画在窗口的信息都将被显示。

IsWindow
函数功能:该函数确定给定的窗口句柄是否标示一个已存在的窗口。

函数原型:BOOL IsWindow(HWND hWnd);
参数:
hWnd:被测试窗口的句柄。

返回值:
如果窗口句柄标识了一个已存在的窗口,返回值为TURE;如果窗口句柄未标识一个已存在窗口,返回值为FALSE。

FindWindow
HWND FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName );
参数:
lpClassName
指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。

如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。

这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。

lpWindowName
指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。

如果此参数为NULL,则匹配所有窗口名。

返回值:
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。

如果函数执行失败,则返回值为 NULL 。

可以通过调用GetLastError函数获得更加详细的错误信息。

SetWindowText:
至于窗口标题的改变,我们可以通过SetWindowText来实现
注:如果窗口本身属性是不显示标题的,这个函数的调用不会影响窗口属性。

//Set title for applica tion’s main frame window .
AfxGetMainWnd ( ) —> SetWindowText (_T("Application title") )
//Set title for View’s MDI child frame window .
GetParentFrame ( ) —> SetWindowText ("_T ("MDI Child Frame new title") )
//Set title for dialog’s push button control.
GetDigitem (IDC_BUTTON) —> SetWindowText (_T ("Button new title ") )
其他:
1、直接得句柄
GetActiveWindow(); //得激活窗口句柄
GetForegroundWindows(); //的前台窗口句柄
AfxGetApp()->GetMainWnd()->GetSafeHwnd() //很常规的,涉及到很多方法
2、枚举型的
HWND GetWindow(HWND hWnd, UINT uCmd ); //要先有hWnd,然后指明uCmd 的关系
HWND FindWindowEx( HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass, L
PCTSTR zWindow);
//由类名和窗口标题得句柄,可能不只一个,所以不唯一确定
3、其他参数的句柄
进程ID:
MARK:由句柄得ID可以用GetWindowThreadProcessId()
而由ID的句柄只能枚举+比较了
历遍全部窗体,并取得他们对应的HWND进一步取得对应PID,符合已知PID的就是了,当然可能要判断一下窗体状态了,如果进程只有一个窗体那就不用了。

例:
如果要在列表框里显示所有的窗口
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
)
{
char lpWinTitle[256];
::GetWindowText(hwnd,lpWinTitle,256-1);
CString m_strTitle;
m_strTitle.Format("%s",lpWinTitle);
CListBox *p_l = (CListBox *)lParam;
if (!m_strTitle.IsEmpty())
{
p_l->AddString(lpWinTitle);
}
return TRUE;
}
调用EnumWindows(EnumWindowsProc, (LPARAM)GetDlgItem(IDC_LIST1));。

相关文档
最新文档