样式标签页设计如下图:

API函数GetWindowLong可以获取窗口样式或扩展样式的值。然后我们罗列出以WS_开头的所有窗口样式与上述样式值做"位与"操作,如果被包含,则返回其窗口样式,否则返回0。这样,就可以得到窗口样式的列表了。扩展样式列表与样式列表类似。相关代码如下:
CListBox* pListStyle=(CListBox*)(((CPage1*)FromHandle(g_hPage1))->GetDlgItem(IDC_LIST_STYLE)); CListBox* pListExStyle=(CListBox*)(((CPage1*)FromHandle(g_hPage1))->GetDlgItem(IDC_LIST_EX_STYLE)); CEdit* pEditStyle=(CEdit*)(((CPage1*)FromHandle(g_hPage1))->GetDlgItem(IDC_EDIT_STYLE)); CEdit* pEditExStyle=(CEdit*)(((CPage1*)FromHandle(g_hPage1))->GetDlgItem(IDC_EDIT_EX_STYLE)); long style = GetWindowLong(g_hWnd, GWL_STYLE); long styleEx= GetWindowLong(g_hWnd, GWL_EXSTYLE); pEditStyle->SetWindowText(Display((int)style)); pEditExStyle->SetWindowText(Display((int)styleEx)); pListStyle->ResetContent(); //清空样式列表框 pListExStyle->ResetContent(); //清空扩展样式列表框 if (style & WS_BORDER) pListStyle->AddString("WS_BORDER"); if( style & WS_CAPTION) pListStyle->AddString("WS_CAPTION"); if( style & WS_CHILD) pListStyle->AddString("WS_CHILD"); ……
六、类标签页
类标签页的设计如下图:

类名在常规标签页已获取。API函数GetClassLong可以获取类样式值。样式列表的实现与窗口样式类似,不再赘述。
七、窗口标签页
窗口标签页的设计如下图:

在该页中,主要用到了下面几个API函数:GetNextWindow、GetWindow和SendMessage。这三个API函数搭配以不同的参数值可以实现不同的功能。这里没有用GetWIndowText函数,是因为它不能取出部分系统窗口和隐藏窗口的标题。我们用SendMessage函数加WM_GETTEXT参数取代之。代码如下:
CPage3* pPage3=(CPage3*)FromHandle(g_hPage3); HWND tempHandle; char tempstr[255]=""; tempHandle = g_hWnd; //本窗口句柄 pPage3->SetDlgItemText(IDC_MYHWND, Display((int)tempHandle)); //获取本窗口标题 ::SendMessage(tempHandle, WM_GETTEXT, 255, (LPARAM)tempstr); pPage3->SetDlgItemText(IDC_MYTITLE, tempstr); //上一窗口 tempHandle = ::GetNextWindow(g_hWnd, GW_HWNDPREV); pPage3->SetDlgItemText(IDC_PREHWND, Display((int)tempHandle)); //获取上一窗口标题 memset(tempstr,0,255); ::SendMessage(tempHandle, WM_GETTEXT, 255, (LPARAM)tempstr); pPage3->SetDlgItemText(IDC_PRETITLE, tempstr); //下一窗口 tempHandle = ::GetNextWindow(g_hWnd, GW_HWNDNEXT); pPage3->SetDlgItemText(IDC_NEXTHWND,Display((int)tempHandle)); memset(tempstr,0,255); //获取下一窗口标题 ::SendMessage(tempHandle, WM_GETTEXT, 255, (LPARAM)tempstr); pPage3->SetDlgItemText(IDC_NEXTTITLE, tempstr); tempHandle = ::GetParent(g_hWnd); //父窗口 pPage3->SetDlgItemText(IDC_PARENTHWND, Display((int)tempHandle)); memset(tempstr,0,255); ::SendMessage(tempHandle, WM_GETTEXT, 255, (LPARAM)tempstr); pPage3->SetDlgItemText(IDC_PARENTTITLE,tempstr); //第一子窗口 tempHandle = ::GetWindow(g_hWnd, GW_CHILD); pPage3->SetDlgItemText(IDC_CHILDHWND,Display((int)tempHandle)); memset(tempstr,-0,255); ::SendMessage(tempHandle, WM_GETTEXT, 255, (LPARAM)tempstr); pPage3->SetDlgItemText(IDC_CHILDTITLE,tempstr); //所有者窗口 tempHandle = ::GetWindow(g_hWnd, GW_OWNER); Page3->SetDlgItemText(IDC_OWNERHWND,Display((int)tempHandle)); memset(tempstr,0,255); ::SendMessage(tempHandle, WM_GETTEXT, 255, (LPARAM)tempstr); pPage3->SetDlgItemText(IDC_OWNERTITLE, tempstr);
八、消息标签页
(编辑:aniston)
|