首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

子窗口控件(五)之编辑类and列表框类

2012-08-25 
子窗口控件(5)之编辑类and列表框类子窗口控件中wParam和lParam变量的含义LOWORD(wParam)子窗口IDHIWORD(wP

子窗口控件(5)之编辑类and列表框类

子窗口控件中

wParam和lParam变量的含义

LOWORD(wParam)子窗口IDHIWORD(wParam)通知码lParam子窗口句柄

 

编辑控件的通知消息

 EN_SETFOCUS编辑控件得到了输入焦点EN_KILLFOCUS失去了输入焦点EN_CHANGE编辑框的内容将变化EN_UPDATE内容已经变化EN_ERRSPACE编辑框没有空间了EN_MAXTEXT没有控件完成插入了EN_HSCROLL水平滚动条被单击了EN_VSCROLL垂直滚动条被单击了

 

常用函数

SendMessage(hwndEdit,WM_CUT,0,0);//剪切SendMessage(hwndEdit,WM_COPY,0,0);//复制SendMessage(hwndEdit,WM_CLEAR,0,0);//删除SendMessage(hwndEdit,WM_PASTE,0,0);//粘贴


获取编辑器的行数

iCount=SendMessage(hwndEdit,EM_GETLINECOUNT,0,0);//获取行数iOffset=SendMessage(hwndEdit,EM_LINEINDEX,iLine,0);//获取位移量iLength=SendMessage(hwndEdit,EM_LINELENGTH,iLine,0)//获取指定行的字符数量
#include <windows.h> #define ID_EDIT     1LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);TCHAR szAppName[] = TEXT ("PopPad1") ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                    PSTR szCmdLine, int iCmdShow){     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, szAppName,                          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 hwndEdit ;          switch (message)     {     case WM_CREATE :          hwndEdit = CreateWindow (TEXT ("edit"), NULL,                         WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |                                   WS_BORDER | ES_LEFT | ES_MULTILINE |                                   ES_AUTOHSCROLL | ES_AUTOVSCROLL,                         0, 0, 0, 0, hwnd, (HMENU) ID_EDIT,                         ((LPCREATESTRUCT) lParam) -> hInstance, NULL) ;          return 0 ;               case WM_SETFOCUS :          SetFocus (hwndEdit) ;          return 0 ;               case WM_SIZE :           MoveWindow (hwndEdit, 0, 0, LOWORD (lParam), HIWORD (lParam), TRUE) ;          return 0 ;               case WM_COMMAND :          if (LOWORD (wParam) == ID_EDIT)               if (HIWORD (wParam) == EN_ERRSPACE ||                          HIWORD (wParam) == EN_MAXTEXT)                    MessageBox (hwnd, TEXT ("Edit control out of space."),                                szAppName, MB_OK | MB_ICONSTOP) ;          return 0 ;                    case WM_DESTROY :          PostQuitMessage (0) ;          return 0 ;     }     return DefWindowProc (hwnd, message, wParam, lParam) ;}


效果图如下:

子窗口控件(五)之编辑类and列表框类

 

列边框通知码

通知码值LBN_ERRSPACE-2LBN_SELCHANGE1LBN_DBLCLK2LBN_SELCANCEL3LBN_SETFOCUS4LBN_KILLFOCUS5

 

常用方法

iCount=SendMessage(hwndList,LB_GETCOUNT,0,0);//获取总的项目数iIndex=SendMessage(hwndList,LB_GETCURSEL,0,0);//获取第几行iLength=SendMessage(hwndList,LB_GETTEXTLEN,iIndex,0);//获取指定行有多少个字符


下面看一段完整的代码,虽然有点恶心;

#include<windows.h>#include<windowsx.h>LRESULT CALLBACK WindowProc(  HWND hwnd,      // handle to window  UINT uMsg,      // message identifier  WPARAM wParam,  // first message parameter  LPARAM lParam   // second message parameter);HINSTANCE hInst;int WINAPI WinMain(  HINSTANCE hInstance,      // handle to current instance  HINSTANCE hPrevInstance,  // handle to previous instance  LPSTR lpCmdLine,          // command line  int nCmdShow              // show state){static TCHAR szAppName[]=TEXT("leidemingzi");HWND hwnd;MSG msg;WNDCLASS wndclass;hInst=hInstance;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hIcon=LoadIcon(NULL,IDI_ERROR);wndclass.hInstance=hInstance;wndclass.lpfnWndProc=WindowProc;wndclass.lpszClassName=szAppName;wndclass.lpszMenuName=NULL;wndclass.style=CS_HREDRAW|CS_VREDRAW;if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("the program require the windows nt"),TEXT("tips"),MB_ICONERROR);return 0;}hwnd=CreateWindow(  szAppName,  // registered class name  TEXT("this is title"), // window name  WS_OVERLAPPEDWINDOW,        // window style  CW_USEDEFAULT,                // horizontal position of window  CW_USEDEFAULT,                // vertical position of window  CW_USEDEFAULT,           // window width  CW_USEDEFAULT,          // window height  NULL,      // handle to parent or owner window  NULL,          // menu handle or child identifier  hInstance,  // handle to application instance  NULL        // window-creation data);ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}LRESULT CALLBACK WindowProc(  HWND hwnd,      // handle to window  UINT uMsg,      // message identifier  WPARAM wParam,  // first message parameter  LPARAM lParam   // second message parameter){HDC hdc;PAINTSTRUCT ps;static HWND hwndButton;static int i,ii;static int cxClient,cyClient;static int cxChar,cyChar;static HWND hwndList;static int count;static int iIndex,iLength;TCHAR szBuffer[20];static TCHAR szBuffer1[]=TEXT("hello");static TCHAR szBuffer2[]=TEXT("I love cplusplus");static TCHAR szBuffer3[]=TEXT("welcome to my blog");static TCHAR szBuffer4[]=TEXT("Let's begin to learn windows programing");static TCHAR szBuffer5[]=TEXT("After learning win32,we learn MFC");switch(uMsg){case WM_CREATE:cxChar=LOWORD(GetDialogBaseUnits());          cyChar=HIWORD(GetDialogBaseUnits());  hwndButton=CreateWindow( TEXT("BUTTON"),TEXT("按钮"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,0,0,0,hwnd,(HMENU)i,hInst,NULL);hwndList=CreateWindow(TEXT("listbox"),TEXT("please select"),WS_CHILD|WS_VISIBLE|LBS_STANDARD,cxChar,cyChar*3,cxChar*26+GetSystemMetrics(SM_CXVSCROLL),cyChar*5,hwnd,(HMENU)ii,hInst,NULL);SendMessage(hwndList,LB_ADDSTRING,0,(LPARAM)szBuffer1);SendMessage(hwndList,LB_ADDSTRING,0,(LPARAM)szBuffer2);SendMessage(hwndList,LB_ADDSTRING,0,(LPARAM)szBuffer5);SendMessage(hwndList,LB_ADDSTRING,0,(LPARAM)szBuffer4);SendMessage(hwndList,LB_ADDSTRING,0,(LPARAM)szBuffer3);return 0;case WM_SIZE:cxClient=LOWORD(lParam);cyClient=GET_Y_LPARAM(lParam);MoveWindow(hwndButton,cxClient/2-cxChar*5,cyClient/2-cyChar*5,cxChar*10,cyChar*4,TRUE);return 0;case WM_COMMAND:if(wParam==i){MessageBox(NULL,TEXT("你点击了按钮"),TEXT("tips"),MB_OK);}if(LOWORD(wParam)==ii&&HIWORD(wParam)==LBN_SELCHANGE){iIndex=SendMessage(hwndList,LB_GETCURSEL,0,0);iLength=SendMessage(hwndList,LB_GETTEXTLEN,iIndex,0)+1;wsprintf(szBuffer,TEXT("你选择第%d 条,长度为 %d "),iIndex+1,iLength);MessageBox(NULL,szBuffer,TEXT("tips"),MB_ICONERROR);}return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,uMsg,wParam,lParam);}


 

子窗口控件(五)之编辑类and列表框类


顶住,再来一个:

#include <windows.h>#define ID_LIST     1#define ID_TEXT     2LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                    PSTR szCmdLine, int iCmdShow){     static TCHAR szAppName[] = TEXT ("Environ") ;     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) (COLOR_WINDOW + 1) ;     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 ("Environment List Box"),                          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 ;}void FillListBox (HWND hwndList) {     int     iLength ;     TCHAR * pVarBlock, * pVarBeg, * pVarEnd, * pVarName ;     pVarBlock = GetEnvironmentStrings () ;  // Get pointer to environment block     while (*pVarBlock)     {          if (*pVarBlock != '=')   // Skip variable names beginning with '='          {               pVarBeg = pVarBlock ;              // Beginning of variable name               while (*pVarBlock++ != '=') ;      // Scan until '='               pVarEnd = pVarBlock - 1 ;          // Points to '=' sign               iLength = pVarEnd - pVarBeg ;      // Length of variable name                    // Allocate memory for the variable name and terminating                    // zero. Copy the variable name and append a zero.               pVarName = calloc (iLength + 1, sizeof (TCHAR)) ;               CopyMemory (pVarName, pVarBeg, iLength * sizeof (TCHAR)) ;               pVarName[iLength] = '\0' ;                    // Put the variable name in the list box and free memory.               SendMessage (hwndList, LB_ADDSTRING, 0, (LPARAM) pVarName) ;               free (pVarName) ;          }          while (*pVarBlock++ != '\0') ;     // Scan until terminating zero     }     FreeEnvironmentStrings (pVarBlock) ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){     static HWND  hwndList, hwndText ;     int          iIndex, iLength, cxChar, cyChar ;     TCHAR      * pVarName, * pVarValue ;     switch (message)     {     case WM_CREATE :          cxChar = LOWORD (GetDialogBaseUnits ()) ;          cyChar = HIWORD (GetDialogBaseUnits ()) ;               // Create listbox and static text windows.                    hwndList = CreateWindow (TEXT ("listbox"), NULL,                              WS_CHILD | WS_VISIBLE | LBS_STANDARD,                              cxChar, cyChar * 3,                              cxChar * 16 + GetSystemMetrics (SM_CXVSCROLL),                              cyChar * 5,                              hwnd, (HMENU) ID_LIST,                              (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),                              NULL) ;                    hwndText = CreateWindow (TEXT ("static"), NULL,                              WS_CHILD | WS_VISIBLE | SS_LEFT,                              cxChar, cyChar,                               GetSystemMetrics (SM_CXSCREEN), cyChar,                              hwnd, (HMENU) ID_TEXT,                              (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),                              NULL) ;          FillListBox (hwndList) ;          return 0 ;               case WM_SETFOCUS :          SetFocus (hwndList) ;          return 0 ;               case WM_COMMAND :          if (LOWORD (wParam) == ID_LIST && HIWORD (wParam) == LBN_SELCHANGE)          {                    // Get current selection.               iIndex  = SendMessage (hwndList, LB_GETCURSEL, 0, 0) ;               iLength = SendMessage (hwndList, LB_GETTEXTLEN, iIndex, 0) + 1 ;               pVarName = calloc (iLength, sizeof (TCHAR)) ;               SendMessage (hwndList, LB_GETTEXT, iIndex, (LPARAM) pVarName) ;                    // Get environment string.               iLength = GetEnvironmentVariable (pVarName, NULL, 0) ;               pVarValue = calloc (iLength, sizeof (TCHAR)) ;               GetEnvironmentVariable (pVarName, pVarValue, iLength) ;                    // Show it in window.                              SetWindowText (hwndText, pVarValue) ;               free (pVarName) ;               free (pVarValue) ;          }          return 0 ;     case WM_DESTROY :          PostQuitMessage (0) ;          return 0 ;     }     return DefWindowProc (hwnd, message, wParam, lParam) ;}

子窗口控件(五)之编辑类and列表框类


热点排行