我仍然是Win32 API的新手。我主要是一名C ++程序员。
我正在尝试通过使用SetScrollInfo和nPage使我的滚动条拇指与页面大小成比例。 我的理解是,这是更好的方法之一。
这是我到目前为止所做的:
typedef struct tagSCROLLINFO
{
UINT cbSize;
UINT fMask;
int nMin;
int nMax;
UINT nPage;
int nPos;
int nTrackPos;
} SCROLLINFO, *LPCSCROLLINFO; // I don't have an understanding of what these
// following variables(?) are: "SCROLLINFO", "*LPCSROLLINFO"
SCROLLINFO mainVertScroll;
mainVertScroll.cbSize = 0;
mainVertScroll.fMask = SIF_ALL;
mainVertScroll.nMin = 0;
mainVertScroll.nMax = 0;
mainVertScroll.nPage = 0;
mainVertScroll.nPos = 0;
mainVertScroll.nTrackPos = 0;
// ...
::SetScrollInfo(ghMainWnd, SB_VERT, ? , true);
我要将什么指针包含到SetScrollInfo中以将其指向我在mainVertScroll中声明的滚动条参数?
// bitmapDraw.cpp
#include <Windows.h>
#include <string>
#include <vector>
#include "resource.h"
//=======================================================
// Globals
HINSTANCE ghAppInst = 0;
HWND ghMainWnd = 0;
HBITMAP ghBitMap = 0;
// Step 1: Define and implement main window procedure
LRESULT CALLBACK
WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// Objects for paint
HDC hdc = 0;
HDC bmHDC = 0;
PAINTSTRUCT ps;
typedef struct tagSCROLLINFO
{
UINT cbSize;
UINT fMask;
int nMin;
int nMax;
UINT nPage;
int nPos;
int nTrackPos;
} SCROLLINFO, *LPCSCROLLINFO;
SCROLLINFO mainVert;
mainVert.cbSize = 0;
mainVert.fMask = SIF_ALL;
mainVert.nMin = 0;
mainVert.nMax = 0;
mainVert.nPage = 0;
mainVert.nPos = 0;
mainVert.nTrackPos = 0;
BITMAP bitmap = {0};
static int bmWidth = 0;
static int bmHeight = 0;
HBITMAP oldBM = 0;
switch(msg)
{
case WM_CREATE:
ghBitMap = (HBITMAP)LoadImage(ghAppInst, "childrenRunning.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(ghBitMap, sizeof(BITMAP), &bitmap);
bmWidth = bitmap.bmWidth;
bmHeight = bitmap.bmHeight;
::SetScrollInfo(ghMainWnd, SB_VERT, &mainVert, true);
return 0;
答案 0 :(得分:2)
只需
::SetScrollInfo(ghMainWnd, SB_VERT, &mainVertScroll, true);
并且不要忘记设置实际的cbSize
mainVertScroll.cbSize = sizeof( SCROLLINFO );
关于:
我不了解以下变量(?)是什么:“SCROLLINFO”,“* LPCSROLLINFO”
如果要在C中创建SCROLLINFO
的实例,则需要编写
struct SCROLLINFO info;
因此,typedef
结构被认为是一种很好的做法,因此您可以创建没有struct
关键字的对象。
所以
typedef struct tagSCROLLINFO
{
...
} SCROLLINFO, *LPCSCROLLINFO;
与:
相同struct tagSCROLLINFO { ... };
typedef struct tagSCROLLINFO SCROLLINFO;
typedef struct tagSCROLLINFO* LPCSCROLLINFO;