Deutsch

Философия каретки 14.01.2025

224  
uscheswoi_82 коренной жительВчера, 14:03
NEW Вчера, 14:03 

Всем привет!

Сегодня поговорим про каретку или курсор. На английском курсор в Windows называется caret, с английского переводится как каретка см. https://translate.google.de/?sl=en&tl=ru&text=caret&op=tra.... Будем играться в Dev-C++.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#1 
uscheswoi_82 коренной жительВчера, 14:10
NEW Вчера, 14:10 
в ответ uscheswoi_82 Вчера, 14:03

Чтобы появилась каретка в окне нужно 3 функции вызвать - CreateCaret - создаёт каретку, там устанавливается ширина и высота каретки. SetCaretPos - устанавливает позицию каретки на x, y. ShowCaret - отображает каретку в определённом окне.

Например вот небольшой код:

CreateCaret(hwnd, NULL, 2, 15); /* Создаём узкую но длинную каретку */
SetCaretPos(10, 10); /* Устанавливаем каретку в окне на позиция x = 10, y = 10*/
ShowCaret(hwnd); /* Отображаем каретку в окне */
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#2 
uscheswoi_82 коренной жительВчера, 14:21
Вчера, 14:21 
в ответ uscheswoi_82 Вчера, 14:10

Я буду программировать в Dev-C++. Показывать не буду как я создавал проект итд. А вот код main.c:

#include <windows.h>

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
char szClassName[] = "WinCaretApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil) {
  HWND hwnd;
  MSG messages;
  WNDCLASSEX wincl;

  wincl.hInstance = hThisInstance;
  wincl.lpszClassName = szClassName;
  wincl.lpfnWndProc = WindowProcedure;
  wincl.style = CS_DBLCLKS;
  wincl.cbSize = sizeof(WNDCLASSEX);

  wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
  wincl.lpszMenuName = NULL;
  wincl.cbClsExtra = 0;
  wincl.cbWndExtra = 0;
  wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND;

  if(!RegisterClassEx(&wincl)) return 0;

  hwnd = CreateWindowEx(0,
  szClassName,
  "",
  WS_OVERLAPPEDWINDOW,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  150,
  60,
  HWND_DESKTOP,
  NULL,
  hThisInstance,
  NULL
  );

  ShowWindow(hwnd, nFunsterStil);
  while(GetMessage(&messages, NULL, 0, 0)) {
    TranslateMessage(&messages);
    DispatchMessage(&messages);
  }
  return messages.wParam;
}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
  switch(message) {
  case WM_CREATE:
    CreateCaret(hwnd, NULL, 2, 15); /* Создаём узкую но длинную каретку */
    SetCaretPos(10, 10); /* Устанавливаем каретку в окне на позиция x = 10, y = 10*/
    ShowCaret(hwnd); /* Отображаем каретку в окне */
  break;
  case WM_DESTROY:
    PostQuitMessage(0);
  break;
  default:
    return DefWindowProc(hwnd, message, wParam, lParam);
  }
return 0;
}

Вуаля! А вот и результат, курсор видно и мигает:



Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#3 
uscheswoi_82 коренной жительВчера, 14:25
NEW Вчера, 14:25 
в ответ uscheswoi_82 Вчера, 14:21

Если же написать так:

CreateCaret(hwnd, NULL, 15, 2);


То будет что-то типа такого, т.е. горизонтальная карет:

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#4 
uscheswoi_82 коренной жительВчера, 14:26
NEW Вчера, 14:26 
в ответ uscheswoi_82 Вчера, 14:25
горизонтальная карет

*горизонтальная каретка

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#5 
uscheswoi_82 коренной жительВчера, 14:31
NEW Вчера, 14:31 
в ответ uscheswoi_82 Вчера, 14:26

Если нужно сменить скорость мигания каретки, то нужно написать так:

SetCaretBlinkTime(3);
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#6