edit类型的子窗口

ES_MULTILINE:多行输入文本框

窗口的消息:

WL_COMMAND:

EN_CHANGE:当edit窗口内的文本内容改变的时候,edit子窗口给父窗口发送一个WL_COMMAND消息,其通知码是EN_CHANGE。

WM_GETTEXT:

用SendMessage函数给edit窗口发送这个消息,同时,给wparam参数传递我们想要获得的字符个数,lParam传递一个内存块地址,sendMessage函数返回后,
lParam指向的内存中,将保存获得的字符。

WL_GETTEXTLENGTH:

用 SendMessage函数给edit窗口发送这个消息,将wParam和1Param都赋值为NULL,那SendMessage函数,将返回edit中的字符个数,但这个字符个数不包括NULL结尾字符。

edit空间演示源码

 1 #include<Windows.h>
 2 
 3 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
 4 
 5 int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
 6 {
 7     WNDCLASS WndClass;
 8     TCHAR* ClassName = TEXT("MyClass");
 9     HWND hwnd;
10     MSG msg;
11     HBRUSH hBrush;
12     hBrush = CreateSolidBrush(RGB(249,98,241));
13 
14     WndClass.cbClsExtra = 0;
15     WndClass.cbWndExtra = 0;
16     WndClass.hbrBackground = hBrush;
17     WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
18     WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
19     WndClass.hInstance = hInst;
20     WndClass.lpfnWndProc = WindProc;
21     WndClass.lpszClassName = ClassName;
22     WndClass.lpszMenuName = NULL;
23     WndClass.style = CS_VREDRAW | CS_HREDRAW;
24 
25     if (!RegisterClass(&WndClass))
26     {
27         MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK);
28         return 0;
29     }
30 
31     hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInst, NULL);
32     if (hwnd == NULL)
33     {
34         MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK);
35         return 0;
36     }
37     ShowWindow(hwnd, nShow);
38     UpdateWindow(hwnd);
39 
40     while (GetMessage(&msg, NULL, 0, 0))
41     {
42         TranslateMessage(&msg);
43         DispatchMessage(&msg);
44     }
45 
46     return 0;
47 }
48 
49 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
50 {
51     HDC hdc;
52     static int cx, cy;
53     static editHwnd, staticHwnd;
54     TCHAR str[1024];
55     int length;
56     switch (message)
57     {
58     case WM_CREATE:
59         editHwnd = CreateWindow(TEXT("edit"),NULL, WS_CHILD | WS_VISIBLE|WS_BORDER|ES_MULTILINE|ES_AUTOVSCROLL , 0, 0, 0, 0, hwnd, (HMENU)1, GetModuleHandle(NULL), NULL);
60         staticHwnd = CreateWindow(TEXT("static"), NULL, WS_CHILD | WS_VISIBLE|WS_BORDER, 0, 0, 0, 0, hwnd, (HMENU)2, GetModuleHandle(NULL), NULL);
61         return 0;
62     case WM_SIZE:
63         cx = LOWORD(lParam);
64         cy = HIWORD(lParam);
65         MoveWindow(editHwnd, 0, 0, cx/2, cy/2, TRUE);
66         MoveWindow(staticHwnd, cx / 2, cy / 2, cx, cy, TRUE);
67         return 0;
68     case WM_COMMAND:
69         if (HIWORD(wParam)==EN_CHANGE)
70         {
71             length = SendMessage(editHwnd, WM_GETTEXTLENGTH, NULL, NULL) + 1;
72             length = length > 1023 ? 1023 : length;
73             SendMessage(editHwnd, WM_GETTEXT, length, (LPARAM)str) ;
74             str[length] = '/0';
75             SetWindowText(staticHwnd,str);
76         }
77         return 0;
78     case WM_DESTROY:
79         PostQuitMessage(0);
80         return 0;
81     default:
82         break;
83     }
84 
85     return DefWindowProc(hwnd, message, wParam, lParam);
86 }
View Code

相关文章:

  • 2021-11-24
  • 2021-11-29
  • 2021-12-06
  • 2022-12-23
  • 2022-12-23
  • 2022-03-03
  • 2021-12-19
  • 2021-06-01
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-29
相关资源
相似解决方案