①函数用于获取控件的句柄
CWnd* GetDlgItem(int nID) const;//检索指向对话框或其他窗口中指定控件或子窗口的指针。
HWND GetSafeHwnd() const;//用于得到窗口指针句柄。
GetDlgItem(ID)->GetSafeHwnd();//通过第一个函数返回的CWnd类指针调用第二个函数获取句柄
②获取本窗体句柄
this->GetSafeHwnd();//本窗体句柄
③获取一个指定子窗口的父窗口句柄
HWND GetParent (HWND hWnd);
//hWnd:子窗口句柄,函数要获得该子窗口的父窗口句柄。
//如果函数成功,返回值为父窗口句柄。如果窗口无父窗口,则函数返回NULL。
④改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。如果指定窗口是一个控件,则改变控件的文本内容。
BOOL SetWindowText(HWND hwnd,LPCTSTRlp String);
/*hWnd
要改变文本内容的窗口或控件的句柄。
lpString
指向一个空结束的字符串的指针,该字符串将作为窗口或控件的新文本。
*/
⑤窗口操作
1.改变指定窗口的属性
2.获取指定窗口的有关信息
1. LONG SetWindowLong(
HWND hWnd, // handle to window
int nIndex, // offset of value to set
LONG dwNewLong // new value
);
2. Long GetWindowLong(HWND hWnd,int nlndex);
参数nIndex
宏定义 | 常量 | 描述 |
---|---|---|
GWL_EXSTYLE | -20 | 获取扩展窗口样式 |
GWL_HINSTANCE | -6 | 获取应用实例句柄 |
GWL_HWNDPARENT | -8 | 获取所有的窗口句柄 |
GWL_ID | -12 | 获取窗口ID |
GWL_STYLE | -16 | 获得窗口样式 |
GWL_USERDATA | -21 | 获取用户设置的32位数据,其值默认为0 |
GWL_WNDPROC | -4 | 获取窗口过程地址或句柄。 |
参数dwNewLong
LVS_ICON | 大图标显示 |
LVS_SMALLICON | 小图标显示 |
LVS_LIST | 列表显示 |
LVS_REPORT | 详细报表显示 |
LVS_EDITLABELS | 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。 |
LVS_SHOWSELALWAYS | 在失去焦点时也显示当前选中的结点 |
LVS_SINGLESEL | 同时只能选中列表中一项 |
⑥改变一个子窗口,弹出式窗口或顶层窗口的尺寸,位置和Z序
BOOL SetWindowPos(
const CWnd* pWndInsertAfter,
int x,//指定窗口左侧的新位置。
int y,//指定窗口右侧的新位置。
int cx,//指定窗口的新宽度。
int cy,//指定窗口的新高度。
UINT nFlags);
参数 pWndInsertAfter和nFlags可查看:MFC 桌面应用程序 | Microsoft Docs
⑦获取窗口位置
1.获取指定窗口的边框矩形的大小
2.获取指定窗口客户区的大小
3.改变指定窗口的位置和大小
1. BOOL GetWindowRect(HWND hWnd,LPRECT lpRect);
//LPRECT 指向一个RECT结构的指针,该结构接收窗口的左上角和右下角的屏幕坐标。
2. BOOL GetClientRect(HWND hWnd, LPRECT lpRect );
3. BOOL MoveWindow( HWND hWnd,int X, int Y, int nWidth,int nHeight,BOOL bRepaint );
//hWnd指定了窗口的句柄
//x指定了CWnd的左边的新位置。
//y指定了CWnd的顶部的新位置。
//nWidth指定了CWnd的新宽度。
//nHeight指定了CWnd的新高度。
//bRepaint指定了是否要重画CWnd。
typedef struct tagRECT {
LONG left;//指定矩形左上角的x坐标。
LONG top;//指定矩形左上角的y坐标。
LONG right;//指定矩形右下角的x坐标。
LONG bottom;//指定矩形右下角的y坐标。
} RECT, *PRECT, *NPRECT, *LPRECT;
⑧坐标转换
1.当前窗体坐标转换为屏幕坐标
2.屏幕坐标转换为当前窗体坐标
1. void ClientToScreen(LPRECT lpRect) const;// 将显示中的给定点或矩形的客户端坐标转换为屏幕坐标。
//lpRect 指向包含要CRect转换的客户端坐标的结构或对象。
2. void ScreenToClient(LPRECT lpRect) const;//将显示中的给定点或矩形的屏幕坐标转换为客户端坐标。
⑨重绘
1.使窗口无效化,向消息队列发送WM_PAINT消息,需要等待处理,再进行重绘
2.绕过消息队列,直接给窗口发送WM_PAINT消息,立即重绘
1. void Invalidate( BOOL bErase = TRUE );
2. BOOL UpdateWindow(HWND hWnd);
⑩该函数允许/禁止指定的窗口或控件接受鼠标和键盘的输入(是否可用)
1.设置控件是否可用
2.判断控件是否可用
3.设置控件是否可见
1. BOOL EnableWindow(HWND hWnd,BOOL bEnable);
2. BOOL IsWindowEnabled(HWND hWnd);
3. BOOL ShowWindow(HWND hWnd, int nCmdShow);
//nCmdShow 指定窗口如何显示。参数具体请参考下面的表格
宏定义 | 常量 | 描述 |
---|---|---|
SW_FORCEMINIMIZE | nCmdShow=11 | 在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。 |
SW_HIDE | nCmdShow=0 | 隐藏窗口并激活其他窗口。 |
SW_MAXIMIZE | nCmdShow=3 | 最大化指定的窗口。 |
SW_MAXIMIZE | nCmdShow=6 | 最小化指定的窗口并且激活在Z序中的下一个顶层窗口。 |
SW_RESTORE | nCmdShow=9 | 激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。 |
SW_SHOW | nCmdShow=5 | 在窗口原来的位置以原来的尺寸激活和显示窗口。 |
SW_SHOWDEFAULT | nCmdShow=10 | 依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。 |
SW_SHOWMAXIMIZED | nCmdShow=3 | 激活窗口并将其最大化。 |
SW_SHOWMINIMIZED | nCmdShow=2 | 激活窗口并将其最小化。 |
SW_SHOWMINNOACTIVE | nCmdShow=7 | 窗口最小化,激活窗口仍然维持激活状态。 |
SW_SHOWNA | nCmdShow=8 | 以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。 |
SW_SHOWNOACTIVATE | nCmdShow=4 | 以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。 |
SW_SHOWNORMAL | nCmdShow=1 | 激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。 |