Пытаюсь создать полосу прокрутки. Использовал ScrollWindow
после него вызываю UpdateWindow
, но все равно получается что-то не то. Прокручиваю, но остаются следы от предыдущего изображения
#include <Windows.h>
#include <vector>
#include <string>
#define EMB(lpszError) MessageBox(NULL, lpszError, "ERROR", MB_ICONERROR | MB_OK)
#define VMB(value) MessageBox(NULL, std::to_string(int(value)).c_str(), "VALUE", MB_OK)
std::vector<std::string> buffer;
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static int cyChar;
static int cyClient;
static int iVScrollInc = 0;
static int iVScrollPos = 0;
static int iVScrollMax = 0; static int tes = 0;
switch (msg)
{
case WM_CREATE:
{
TEXTMETRIC tm;
HDC hDc = GetDC(hWnd);
GetTextMetrics(hDc, &tm);
cyChar = tm.tmHeight + tm.tmExternalLeading;
ReleaseDC(hWnd, hDc);
for (int i = 0; i < 100; ++i)
{
buffer.push_back(std::to_string(i));
}
break;
}
case WM_SIZE:
{
cyClient = HIWORD(lParam);
iVScrollMax = max(0,static_cast<int>(buffer.size()) * cyChar - cyClient);
iVScrollPos = min(iVScrollPos, iVScrollMax); buffer.push_back(std::to_string(cyClient));
SetScrollRange(hWnd, SB_VERT, 0, iVScrollMax, TRUE);
break;
}
case WM_VSCROLL:
{
switch (LOWORD(wParam))
{
case SB_LINEDOWN:
iVScrollInc = 1;
break;
case SB_LINEUP:
iVScrollInc = -1;
break;
case SB_THUMBTRACK:
iVScrollInc = HIWORD(wParam) - iVScrollPos;
break;
default:
iVScrollInc = 0;
break;
}
iVScrollInc = max(-iVScrollPos, min(iVScrollInc, iVScrollMax - iVScrollPos));
if (iVScrollInc != 0)
{
iVScrollPos += iVScrollInc;
ScrollWindow(hWnd, 0, -cyChar * iVScrollInc, NULL, NULL);
SetScrollPos(hWnd, SB_VERT, iVScrollPos, TRUE);
}
return 0;
}
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDc = BeginPaint(hWnd, &ps);
for (int yPos = 0; yPos < buffer.size(); ++yPos)
{
TextOut(hDc, 10, 10 + yPos * cyChar, buffer[yPos].c_str(), buffer[yPos].length());
}
EndPaint(hWnd, &ps);
break;
}
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
ATOM RegisterMyClass(HINSTANCE hInstance, LPCSTR lpszClassName)
{
WNDCLASSEX wndClass = { 0 };
wndClass.cbClsExtra = 0;
wndClass.cbSize = sizeof(wndClass);
wndClass.cbWndExtra = 0;
wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hIcon = LoadIcon(NULL, IDI_SHIELD);
wndClass.hInstance = hInstance;
wndClass.lpfnWndProc = WndProc;
wndClass.lpszClassName = lpszClassName;
wndClass.style = CS_HREDRAW | CS_VREDRAW;
return RegisterClassEx(&wndClass);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmd)
{
LPCSTR lpszClassName = "INeedIt";
HWND hWnd;
MSG msg;
if (!RegisterMyClass(hInstance, lpszClassName))
EMB("Cant RegisterMyClass");
if (!(hWnd = CreateWindow(lpszClassName, "Window", WS_OVERLAPPEDWINDOW | WS_VSCROLL, CW_USEDEFAULT
, CW_USEDEFAULT, 500, 500, NULL, NULL, hInstance, NULL)))
EMB("Cant CreateWindow");
ShowWindow(hWnd, nCmd);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0))
{
DispatchMessage(&msg);
TranslateMessage(&msg);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Подскажите, пожалуйста, что получится в каждом варианте и почему
Делаю на Wordpress форму с возможностью добавления нескольких фалов путём создание нескольких заранее определённых инпутов:
Я написала таблицу JS+HTML Но у меня возникла проблема с добавлением строкиВо время добавления строки дублируется значение первой строки