0
我正在寫一個類似於記事本的示例應用程序,使用Win32函數C &。一旦用戶按下鍵盤上的任何鍵,它將在輸出上顯示爲「Key Pressed:」,然後移動到下一行。當用戶繼續按鍵時,他會到達頁面的末尾,但我發現很難動態滾動垂直條。 我甚至嘗試在WM_CHAR中使用SetScrollInfo動態設置滾動條範圍,但仍然無效。請給我一個方法來做到這一點。示例代碼供您參考。基於用戶輸入動態使用Win32函數滾動
case WM_CHAR:
//////////////////////////////////////////////////////////////////////////
hdc = GetDC(hwnd);
//////////////////////////////////////////////////////////////////////////
GetTextMetrics(hdc, &tm);
cyChar = tm.tmHeight + tm.tmExternalLeading;
//////////////////////////////////////////////////////////////////////////
si.cbSize = sizeof(si);
si.fMask = SIF_RANGE | SIF_PAGE;
si.nMin = 0;
si.nMax = iMaxLines;
si.nPage = cyClient/cyChar;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
//////////////////////////////////////////////////////////////////////////
wsprintf(szBuffer, TEXT("Key pressed %c, Pos: %d"), wParam, iMaxLines);
TextOut(hdc, 0, cyChar * iMaxLines++, szBuffer, lstrlen(szBuffer));
//////////////////////////////////////////////////////////////////////////
ReleaseDC(hwnd, hdc);
//////////////////////////////////////////////////////////////////////////
break;
我不確定這是否有必要,但您的窗口是否具有WS_VSCROLL樣式? – RichieHindle
是的...我有。請找到如下所示的窗口創建代碼。 – kiranbhatter
HWND = CreateWindow的(szClassName, \t \t \t \t \t \t TEXT( 「文本墊」), \t \t \t \t \t \t WS_OVERLAPPEDWINDOW | WM_VSCROLL, \t \t \t \t \t \t CW_USEDEFAULT, \t \t \t \t \t \t CW_USEDEFAULT , \t \t \t \t \t \t CW_USEDEFAULT, \t \t \t \t \t \t CW_USEDEFAULT, \t \t \t \t \t \t NULL, \t \t \t \t \t \t NULL, \t \t \t \t \t \t hInstanc e, \t \t \t \t \t \t NULL); \t ShowWindow(hwnd,iCmdShow); \t UpdateWindow(hwnd); – kiranbhatter