子窗口控件——按钮类别
来源:互联网 发布:mysql 子查询 临时表 编辑:程序博客网 时间:2024/05/16 05:31
id = GetWindowLong (hwndChild, GWL_ID) ;
id = GetDlgCtrlID (hwndChild) ;
hwndChild = GetDlgItem (hwndParent, id) ;
当按钮的高度为文字字符高度的7/4倍时,按钮的外观看起来最好,其中文字字符由BTNLOOK使用;而按钮的宽度至少调节到文字的宽度再加上两个字符的宽度。
按键: 按键控件主要用来触发一个立即响应的动作,而不保留任何形式的开/关指示。
eg:BS_PUSHBUTTON和BS_DEFPUSHBUTTON,BS_DEFPUSHBUTTON中的“DEF”代表“内定”。
复选框: 复选框是一个文字方块,文字通常出现在复选框的右边(如果您在建立按钮时指定了BS_LEFTTEXT样式, 那么文字会出现在左边;您也许将用BS_RIGHT直接调整文字来组合此样式)。复选框通常用于允许使用者 对选项进行选择的应用程序中。复选框的常用功能如同一个开关:单击框一次将显示勾选标记,再次单击清 除勾选标记.(机长时间记录一个状态!)
e.g.: BS_CHECKBOX和BS_AUTOCHECKBOX。
单选按钮: 在对话框中,单选按钮组常常用来表示相互排斥的选项。与复选框不同,单选按钮的工作与开关不一样, 也就是说,当第二次按单选按钮时,它的状态会保持不变。
e.g: 单选按钮有窗口样式BS_RADIOBUTTON或BS_AUTORADIOBUTTON两种,但是后者只用于对话框。
SendMessage (hwndButton, BM_SETCHECK, 1, 0) ; 表示选中。Auto的会自动选中。
SendMessage (hwndButton, BM_SETCHECK, 0, 0) ; 未选中。
改变按钮文字:
SetWindowText (hwnd, pszString) ;对于一般的窗口来说,这个文字是标题列的文字;对于按钮控件来说,它是随 着该按钮显示的文字。
取得窗口目前的文字: iLength = GetWindowText (hwnd, pszBuffer, iMaxLength) ;
iLength = GetWindowTextLength (hwnd) ;
正如前面谈到的,Microsoft C包括宽字符和需要字符串参数的C语言运行时期链接库函数的所有普通版本。不过,Windows复制了其中一部分。例如,下面是Windows定义的一组字符串函数,这些函数用来计算字符串长度、复制字符串、连接字符串和比较字符串:
ILength = lstrlen (pString) ;pString = lstrcpy (pString1, pString2) ;pString = lstrcpyn (pString1, pString2, iCount) ;pString = lstrcat (pString1, pString2) ;iComp = lstrcmp (pString1, pString2) ;iComp = lstrcmpi (pString1, pString2) ;
理解父亲向子 和 子向父传递消息的形式~!!!
当您运行BTNLOOK时,将看到在显示区域的左边会显示出不同的按钮型态。我在前面已经提到过,用鼠标单击按钮时,子窗口控件就向其父窗口发送一个WM_COMMAND消息。BTNLOOK拦截WM_COMMAND消息并显示wParam和lParam的值,它们的含义如下:
HIWORD (wParam)
lParam
子窗口ID通知码
子窗口代号
父窗口消息处理程序也能向子窗口控件发送消息。这些消息包括以前缀WM开头的许多消息。另外,在WINUSER.H中还定义了8个按钮说明消息;前缀BM表示“按钮消息”。这些按钮消息如下表所示:
BM_GETCHECK和BM_SETCHECK消息由父窗口发送给子窗口控件,以取得或者设定复选框和单选按钮的选中标记。
SendMessage (hwndButton, BM_SETCHECK, 1, 0) ; 表示选中。Auto的会自动选中。
SendMessage (hwndButton, BM_SETCHECK, 0, 0) ; 未选中。
BM_GETSTATE和BM_SETSTATE消息表示按钮处于正常状态还是(鼠标或Spacebar键按下时的)“按下”状态。我们将在讨论按钮的每种型态时,看到这些消息是如何起作用的。BM_SETSTYLE消息允许您在按钮建立之后改变按钮样式。可是试验后发现都可以通用!!!不知道有什么区别?http://msdn.microsoft.com/zh-cn/magazine/bb775943(en-us,VS.85).aspx 这个说的明白!
可见的和启用的按钮:
当窗口是可见的而未被启用时,那么窗口将以灰色而非黑色显示文字。
for(i = 0; i<NUM; i++)
if(IsWindowVisible(hwndButton[i])) ShowWindow(hwndButton[i], SW_HIDE);
else ShowWindow(hwndButton[i], SW_SHOWNORMAL);
for(i = 0; i<NUM; i++)
if(IsWindowEnabled(hwndButton[i])) EnableWindow(hwndButton[i],FALSE);
else EnableWindow(hwndButton[i],TRUE);
我在本章前面已经提到过,当用鼠标单击按钮、复选框、单选框和拥有者绘制按钮时,它们接收到输入焦点。这些控件使用文字周围的虚线来表示它拥有了输入焦点。当子窗口控件得到输入焦点时,其父窗口就失去了输入焦点;所有的键盘输入都进入子窗口控件,而不会进入父窗口中。但是,子窗口控件只对Spacebar键作出回应,此时Spacebar键的作用就如同鼠标按键一样。这种情形导致了一个明显的问题:您的程序失去了对键盘处理的控件。!!!
- /*--------------------------------------------------------------------------
- BTNLOOK.C -- Button Look Program
- (c) Charles Petzold, 1998
- ---------------------------------------------------------------------------*/
- #include <windows.h>
- #include<windowsx.h>
- struct
- {
- int iStyle ;
- TCHAR * szText ;
- }
- button[] =
- {
- BS_PUSHBUTTON, TEXT ("PUSHBUTTON"),
- BS_DEFPUSHBUTTON, TEXT ("DEFPUSHBUTTON"),
- BS_CHECKBOX, TEXT ("CHECKBOX"),
- BS_AUTOCHECKBOX, TEXT ("AUTOCHECKBOX"),
- BS_RADIOBUTTON, TEXT ("RADIOBUTTON"),
- BS_3STATE, TEXT ("3STATE"),
- BS_AUTO3STATE, TEXT ("AUTO3STATE"),
- BS_GROUPBOX, TEXT ("GROUPBOX"),
- BS_AUTORADIOBUTTON, TEXT ("AUTORADIO"),
- BS_OWNERDRAW, TEXT ("OWNERDRAW")
- } ;
- #define NUM (sizeof button / sizeof button[0])
- LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
- int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
- PSTR szCmdLine, int iCmdShow)
- {
- static TCHAR szAppName[] = TEXT ("BtnLook") ;
- HWND hwnd ;
- MSG msg ;
- WNDCLASS wndclass ;
- wndclass.style = CS_HREDRAW | CS_VREDRAW ;
- wndclass.lpfnWndProc = WndProc ;
- wndclass.cbClsExtra = 0 ;
- wndclass.cbWndExtra = 0 ;
- wndclass.hInstance = hInstance ;
- wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
- wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
- wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
- wndclass.lpszMenuName = NULL ;
- wndclass.lpszClassName = szAppName ;
- if (!RegisterClass (&wndclass))
- {
- MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
- szAppName, MB_ICONERROR) ;
- return 0 ;
- }
- hwnd = CreateWindow ( szAppName, TEXT ("Button Look"),
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, NULL, hInstance, NULL) ;
- ShowWindow (hwnd, iCmdShow) ;
- UpdateWindow (hwnd) ;
- while (GetMessage (&msg, NULL, 0, 0))
- {
- TranslateMessage (&msg) ;
- DispatchMessage (&msg) ;
- }
- return msg.wParam ;
- }
- LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- static HWND hwndButton[NUM] ;
- static RECT rect ;
- static TCHAR szTop[] = TEXT ("message wParam lParam"),
- szUnd[] = TEXT ("_______ ______ ______"),
- szFormat[] = TEXT ("%-16s%04X-%04X %04X-%04X"),
- szBuffer[50] ;
- static int cxChar, cyChar ;
- HDC hdc ;
- PAINTSTRUCT ps ;
- int i ;
- int maxlength;
- switch (message)
- {
- case WM_CREATE :
- cxChar = LOWORD (GetDialogBaseUnits ()) ;
- cyChar = HIWORD (GetDialogBaseUnits ()) ;
- for (i = 0 ; i < NUM ; i++)
- hwndButton[i] = CreateWindow ( TEXT("button"),button[i].szText,
- WS_CHILD | WS_VISIBLE | button[i].iStyle,
- cxChar, cyChar * (1 + 2 * i),
- 20 * cxChar, 7 * cyChar / 4,
- hwnd, (HMENU) i,
- ((LPCREATESTRUCT) lParam)->hInstance, NULL) ;
- return 0 ;
- case WM_SIZE :
- rect.left = 24 * cxChar ;
- rect.top = 2 * cyChar ;
- rect.right = LOWORD (lParam) ;
- rect.bottom = HIWORD (lParam) ;
- return 0 ;
- case WM_PAINT :
- InvalidateRect (hwnd, &rect, TRUE) ;
- hdc = BeginPaint (hwnd, &ps) ;
- SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
- SetBkMode (hdc, TRANSPARENT) ;
- TextOut (hdc, 24 * cxChar, cyChar, szTop, lstrlen (szTop)) ;
- TextOut (hdc, 24 * cxChar, cyChar, szUnd, lstrlen (szUnd)) ;
- EndPaint (hwnd, &ps) ;
- return 0 ;
- case WM_KEYDOWN:
- switch(wParam)
- {
- case VK_UP:
- //SendMessage(hwndButton[2],BM_SETCHECK, 1, 0 );
- SendMessage(hwndButton[3],BM_SETCHECK, 1, 0 );//复选,单选按钮
- SendMessage(hwndButton[5],BM_SETSTATE, 1, 0); //按钮
- break;
- case VK_DOWN:
- SendMessage(hwndButton[3],BM_SETCHECK, 0, 0);//父向子发送消息
- SendMessage(hwndButton[4],BM_SETSTATE,0,0);
- break;
- case VK_RIGHT:
- SendMessage(hwndButton[3],BM_SETCHECK,
- (WPARAM)!SendMessage(hwndButton[3],BM_GETCHECK,0,0), 0);
- break;
- case VK_HOME:
- //for(i = 0; i<NUM; i++)
- //if(IsWindowVisible(hwndButton[i])) ShowWindow(hwndButton[i], SW_HIDE);
- //else ShowWindow(hwndButton[i], SW_SHOWNORMAL);
- for(i = 0; i<NUM; i++)
- if(IsWindowEnabled(hwndButton[i])) EnableWindow(hwndButton[i],FALSE);
- else EnableWindow(hwndButton[i],TRUE);
- break;
- }
- hdc = GetDC(hwnd);
- if(SendMessage(hwndButton[3],BM_GETCHECK,0,0))
- TextOut(hdc,0,0,TEXT("TRUE"),4);
- else
- TextOut(hdc,0,0,TEXT("FALSE"),5);
- DeleteObject(hdc);
- //InvalidateRect(hwnd, &rect, TRUE);
- return 0;
- case WM_DRAWITEM :
- case WM_COMMAND :
- ScrollWindow (hwnd, 0, -cyChar, &rect, &rect) ;
- hdc = GetDC (hwnd) ;
- SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
- TextOut( hdc, 24 * cxChar, cyChar * (rect.bottom / cyChar - 1),
- szBuffer,
- wsprintf (szBuffer, szFormat,
- message == WM_DRAWITEM ? TEXT ("WM_DRAWITEM") :
- TEXT ("WM_COMMAND"),
- HIWORD (wParam), LOWORD (wParam),
- HIWORD (lParam), LOWORD (lParam))) ;
- ReleaseDC (hwnd, hdc) ;
- if((HWND)lParam == hwndButton[0]){//子向父发送消息
- for(i =1; i < NUM; i++){
- maxlength = GetWindowText(hwndButton[i], szBuffer, 40);
- SetWindowText(hwndButton[i],lstrcat(szBuffer,L"+"));
- }
- }
- ValidateRect (hwnd, &rect) ;
- break ;
- /*case WM_KILLFOCUS://系统给正在失去输入焦点的窗口发送一个WM_KILLFOCUS消息
- //wParam参数是接收输入焦点的窗口的代号。
- if(hwnd == GetParent((HWND)wParam))
- SetFocus(hwnd);
- /*等价于
- for(i = 0; i<NUM; i++){
- if(hwndButton[i] == (HWND) wParam){
- SetFocus(hwnd);
- break;
- }
- }
- */
- return 0;
- case WM_DESTROY :
- PostQuitMessage (0) ;
- return 0 ;
- }
- return DefWindowProc (hwnd, message, wParam, lParam) ;
- }
- 子窗口控件——按钮类别
- 子窗口控件——按钮类别
- 子窗口控件——按钮(BUTTONS)
- 子窗口控件——按钮(BUTTONS)
- 子窗口控件(1)瞟一眼按钮类
- 第九章 子窗口控件(静态类别,滚动条类别)
- windows——窗口类别 窗口
- 通过按钮控件实现MDI新建子窗口
- 第九章 9-1 子窗口控件:按钮类
- 子窗口控件——静态控件(Static)
- 子窗口控件——文本框(Edit Control)
- 子窗口控件——列表框(List Box)
- Windows学习笔记16——子窗口控件
- 子窗口控件
- 改变子窗口控件
- 子窗口控件
- 子窗口控件WaterWnd
- 子窗口控件 复习
- G530 CPU虚拟化试验
- GC安装错误3:agent无法secure(未解决)
- patch 文件操作
- C语言深度解剖(精讲版)——读书笔记7 &&自己的一些理解
- Flex调ArcGISServer安全沙箱冲突
- 子窗口控件——按钮类别
- Spring 整合 CXF
- JAVA中的volatile关键字
- pageContext对象的用法
- 用ZendStudio ZendServer ZendDebuger 调试PHP程序
- 如何保持良好的心态
- 安装MyEclipse8.5版的Fatjar包
- makefile中的patsubst
- 菜单