다음 코드는 자체적으로 설명해야한다고 생각합니다.TextBox에 텍스트를 추가하는 방법?
#include <Windows.h>
static HWND textBoxInput;
static HWND button;
static HWND textBoxOutput;
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR cmdLine,int nCmdShow)
{
HWND hMainWindow;
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.lpszClassName = "Main's window class";
wc.hInstance = hInstance;
RegisterClass(&wc);
hMainWindow = CreateWindow(wc.lpszClassName,"Append text main window",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,400,NULL,NULL,hInstance,NULL);
error=GetLastError();
if(hMainWindow == NULL) return 1;
textBoxInput = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", NULL,WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, 10, 10, 300, 21, hMainWindow, NULL, NULL, NULL);
button = CreateWindowEx(WS_EX_CLIENTEDGE,"Button","Append",WS_CHILD | WS_VISIBLE | ES_CENTER, 10, 41,75,30,hMainWindow,NULL,NULL,NULL);
textBoxOutput = CreateWindowEx(WS_EX_CLIENTEDGE,"Edit",TEXT("->This content is untouchable and unreadable!<-"),WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | ES_READONLY ,10,81,500,90,hMainWindow,NULL,NULL,NULL);
ShowWindow(hMainWindow,SW_SHOW);
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_COMMAND:
if((HWND)lParam == button)
{
TCHAR* buffer = new TCHAR[150];
GetWindowText(textBoxInput,buffer,150);
SetWindowText(textBoxOutput,buffer);
//AppendWindowText(textBoxOutput,buffer,150) - I haven't found such function;
delete [] buffer;
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
HBRUSH pedzel;
pedzel = CreateSolidBrush(RGB(10,250,10));
FillRect(hdc, &ps.rcPaint, pedzel);
EndPaint(hwnd, &ps);
return 0;
}
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
요약하면 :이 프로그램은 두 개의 textBoxes와 첫 번째부터 두 번째까지 내용을 복사하는 프로세스를 시작하는 버튼을 만듭니다. SetWindowText
함수를 사용하면 출력 상자를 정리할 수 있습니다. 제리 Cofinn의 대답 후
업데이트
SendMessage(textBoxOutput,EM_SETSEL,-1,-1); //no difference between passing 0 or -1
SendMessage(textBoxOutput,EM_REPLACESEL,TRUE,(LPARAM)buffer);
놀랍게도, 앞에 추가 텍스트. 나는 EM_SETSEL에 대해 the documentation을 읽었으며, 왜 아직도 원시 입력을 끝내지 않는지 궁금합니다.
선택 항목 설정 및 조정에 대한 자세한 내용은 'TextBoxBase.AppendText'에 대한 [.NET 참조 소스] (https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/)를 참조하십시오. WinForms/TextBoxBase.cs, 5194bb23bd26ed3e) 도움이 될 수도 있습니다 – Slai