這個代碼總是工作,我不知道什麼是錯的,見下圖:編輯控件文本不能改變
CreateWindowW(L"EDIT", L"Type Here!", WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 10, 150, 25, hwnd, (HMENU)ID_TEXTBOX1, NULL, NULL);
是運行控制創建程序時,可以選擇文本和使用SetWindowText函數進行更改,但不能通過鍵入更改文本,爲什麼?
我已經看到堆棧溢出的這個話題:win32 api edit control can't be selected or edited,但即使使用SetFocus函數或EnableWindow,它仍然不起作用。
這是整個程序的功能:
#include <windows.h>
// IDs dos controles
#define ID_TEXTBOX1 1000
#define ID_BUTTON1 1001
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR pCmdLine, int nCmdShow)
{
MSG msg;
HWND hwnd;
WNDCLASSW wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.lpszClassName = L"WINDOW";
wc.hInstance = hInstance;
wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
wc.lpszMenuName = NULL;
wc.lpfnWndProc = WndProc;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassW(&wc);
hwnd = CreateWindowW(L"WINDOW", L"Janela",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 200, 200, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0)) {
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
// Here is creted the edit control
CreateWindowW(L"EDIT", L"Type Here!", WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 10, 150, 25, hwnd, (HMENU)ID_TEXTBOX1, NULL, NULL);
// Functions that i tried
//EnableWindow(GetDlgItem(hwnd, ID_TEXTBOX1), true);
//SetFocus(GetDlgItem(hwnd, ID_TEXTBOX1));
// Here is create a button
CreateWindowW(L"BUTTON", L"Show Text", WS_CHILD | WS_VISIBLE, 10, 45, 100, 20, hwnd, (HMENU)ID_BUTTON1, NULL, NULL);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_BUTTON1:
int len = GetWindowTextLengthW(GetDlgItem(hwnd, ID_TEXTBOX1)) + 1;
wchar_t *txt = new wchar_t[len];
GetWindowText(GetDlgItem(hwnd, ID_TEXTBOX1), txt, len);
//
MessageBox(NULL, txt, L"Info", MB_OK);
delete txt;
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProcW(hwnd, msg, wParam, lParam);
}
請發佈您的應用程序的消息循環,並提供創建主窗口的代碼。你也在泄漏記憶。我可以看到'new wchar_t [len]',但沒有附帶'delete []'。由於這個問題被標記爲* C++ *,您應該使用'std :: vector'而不是手動內存管理。 – IInspectable
@IInspectable我在非託管數組* txt之後添加了整個代碼和'delete',但即使在非託管數組之後刪除,或者沒有WM_COMMAND的內容,它仍然不起作用。 – FelipeDurar
該項目可在http://www.mediafire.com/download/zkfh1u4mi2z4fe4/testEDC.zip – FelipeDurar