用Edit控件接收消息并显示LPARAM内容。
环境:EVC4.0
过程:
1、创建一个典型的“Hello World”的WCE Application;
( File -> new -> Projects -> choose "WCE Application" , enter the project name -> default choose "a typical Hello world project ")
2、添加及修改以下代码
- //添加定义
- #define ID_EDIT 301
- #define ID_COMMTIME 302
- //定义编辑框控件为全局变量
- HWND g_hWndShow;
- void Test()
- {
- int total;
- int start;
- int end;
- LPTSTR szBuff = new TCHAR[64];
- start = GetTickCount();
- for (i = 0; i < 100000; i++)
- {
- }
- end = GetTickCount();
- total = end - start;
- wsprintf(szBuff, L"Test Time: %d /r/n", total);
- SendMessage(g_hWndShow, EM_REPLACESEL, 0, (LPARAM)szBuff);
- }
- //调用该函数
- LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- HDC hdc;
- int wmId, wmEvent;
- PAINTSTRUCT ps;
- TCHAR szHello[MAX_LOADSTRING];
- HWND hWndCOMM;
- UCHAR temp[64];
- switch (message)
- {
- case WM_COMMAND:
- wmId = LOWORD(wParam);
- wmEvent = HIWORD(wParam);
- // Parse the menu selections:
- switch (wmId)
- {
- case IDM_HELP_ABOUT:
- DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
- break;
- case IDM_FILE_EXIT:
- DestroyWindow(hWnd);
- break;
- case ID_COMMTIME:
- Test(); //调用Test函数
- break;
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- break;
- case WM_CREATE:
- hwndCB = CommandBar_Create(hInst, hWnd, 1);
- CommandBar_InsertMenubar(hwndCB, hInst, IDM_MENU, 0);
- CommandBar_AddAdornments(hwndCB, 0, 0);
- g_hWndShow = CreateWindow(TEXT("edit"),
- NULL,
- WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | ES_LEFT | WS_BORDER,
- 50,
- 50,
- 380,
- 200,
- hWnd,
- (HMENU)ID_EDIT,
- hInst,
- NULL
- );
- hWndCOMM = CreateWindow(TEXT("button"),
- TEXT("COMTime"),
- WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
- 190,
- 340,
- 100,
- 30,
- hWnd,
- (HMENU)ID_COMMTIME,
- hInst,
- NULL);
- break;
- case WM_PAINT:
- RECT rt;
- hdc = BeginPaint(hWnd, &ps);
- GetClientRect(hWnd, &rt);
- // LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
- // DrawText(hdc, szHello, _tcslen(szHello), &rt,
- // DT_SINGLELINE | DT_VCENTER | DT_CENTER);
- EndPaint(hWnd, &ps);
- break;
- case WM_DESTROY:
- CommandBar_Destroy(hwndCB);
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- return 0;
- }
错误:
SendMessage(g_hWndShow, EM_REPLACESEL, 0, (LPARAM) total);
刚开始是这样写的,结果编辑框没有显示内容。原因为:
在一般情况下,lParam是一个指针,它指向的数据类型有三种:长整形、自定义数据结构类型、字符串类型。
需要将total转换为字符串才可以正常显示。使用wsprintf把total的内容赋给了数组szBuff。
改完后可以正常显示了。
EM_REPLACESEL 用指定文本替换编辑控件中的当前选定内容
WM_SETTEXT 会把原内容清空