Заставка

Программирование на старых и современных языках, а так-же дизайн

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Тут можно задавать вопросы по Си/Си++

Сообщений 1 страница 4 из 4

1

Тут можно задавать вопросы по Си/Си++

0

2

Вопрос по Win32 API, как в Си или Си++ отправлять текст в окно, а так-же из буфера обмена, если знаешь HWND?

Отредактировано pochemuchka (Сб, 25 Июл 2020 06:42:56)

0

3

Отправить текст в окно просто вот так:

Код:
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HWND hwndField1;  // Поле1 
    HWND hwndField2;  // Поле2
    char buf[512];
    switch (message)
    {
        case WM_CREATE:
          hwndField1 = CreateWindow("EDIT", "AA", WS_CHILD | WS_VISIBLE, 10, 10, 200, 30, hwnd, NULL, hInst, lParam); // Создаём поле1
          hwndField2 = CreateWindow("EDIT", "BB", WS_CHILD | WS_VISIBLE, 10, 30, 100, 20, hwnd, NULL, hInst, lParam); // Создаём поле2
          GetWindowText(hwndField1, buf, GetWindowTextLength(hwndField1)+1); // Считываем текст из поел1, и сохраняем в переменную buf
          SetWindowText(hwndField2, buf); // Считываем из переменной buf, и записываем текст в поле2
        break;
        case WM_DESTROY:
            PostQuitMessage (0); 
            break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}

Чтобы вставить из буфера обмена то вот код:

Код:
          SendMessage(hwndField1, WM_ACTIVATE, LOWORD(WA_ACTIVE), NULL); // Делаем поле1 активным
          keybd_event(VK_LCONTROL, 0, 0, 0); // Посылаем клавишу LCTRL
          keybd_event(0x56, 0, 0, 0); // и V
          keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);  // Отпускаем LCTRL
          keybd_event(0x56, 0, KEYEVENTF_KEYUP, 0); // Отпускаем V

0

4

lexx821 написал(а):

char buf[512];

lexx821 написал(а):

GetWindowText(hwndField1, buf, GetWindowTextLength(hwndField1)+1); // Считываем текст из поел1, и сохраняем в переменную buf
          SetWindowText(hwndField2, buf); // Считываем из переменной buf, и записываем текст в поле2

Как же я промахнулся... Сорри прям стыдно... Короче в коде ошибка.
Короче делать лучше так:

Код:
#include <malloc.h>
Код:
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HWND hwndField1;  // Поле1 
    HWND hwndField2;  // Поле2
    char *buf;
   ...
Код:
switch (message)
    {
        case WM_CREATE:
          buf = (char *) malloc(GetWindowTextLength(hwndField1)+1);
          GetWindowText(hwndField1, buf); // Считываем текст из поел1, и сохраняем в переменную buf
          SetWindowText(hwndField2, buf); // Считываем из переменной buf, и записываем текст в поле2
          free(buf);

...

0