#include "Windows.h"LRESULT CALLBACK wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
HDC hdc;
PAINTSTRUCT ps;
TEXTMETRIC tm;
SCROLLINFO si;
static int cxChar, cyChar, cxCap, cxClient, cyClient;
int iVertPos;
switch(message){
case WM_CREATE:
hdc = GetDC(hwnd);
GetTextMetrics(hdc, &tm);
cxChar = tm.tmAveCharWidth;
cxCap = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
cyChar = tm.tmHeight + tm.tmExternalLeading;
ReleaseDC(hwnd,hdc);
return 0;
case WM_SIZE:
cyClient = HIWORD(lParam);
si.cbSize = sizeof(si);
si.fMask = SIF_RANGE | SIF_PAGE;
si.nMin = 0;
si.nMax = 200;
si.nPage = cyClient / cyChar;
SetScrollInfo(hwnd, SB_VERT, &si, true);
return 0;
case WM_VSCROLL:
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
GetScrollInfo(hwnd,SB_VERT,&si);
iVertPos = si.nPos;
switch(LOWORD(wParam)){
case SB_TOP:
si.nPos = si.nMin;
break;
case SB_BOTTOM:
si.nPos = si.nMax;
break;
case SB_LINEUP:
si.nPos -= 1;
break;
case SB_LINEDOWN:
si.nPos += 1;
break;
case SB_PAGEUP:
si.nPos -= si.nPage;
break;
case SB_PAGEDOWN:
si.nPos += si.nPage;
break;
case SB_THUMBTRACK:
si.nPos = si.nTrackPos;
break;
default:
break;
}
si.fMask = SIF_POS;
SetScrollInfo(hwnd, SB_VERT, &si, false);
GetScrollInfo(hwnd, SB_VERT, &si);
if(si.nPos != iVertPos){
ScrollWindow(hwnd, 0, cyChar * (iVertPos - si.nPos), NULL, NULL);
UpdateWindow(hwnd);
}
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
GetScrollInfo(hwnd, SB_VERT, &si);
iVertPos = si.nPos;
for(int i = 0;i <= 200;++i){
TCHAR buffer[10];
int length = wsprintf(buffer, TEXT("%d"), i);
TextOut(hdc, 0, (i - iVertPos) * cyChar, buffer, length);
}
EndPaint(hwnd, &ps);
return 0;
case WM_KEYDOWN:
switch(wParam){
case VK_HOME:
SendMessage(hwnd, WM_VSCROLL, SB_TOP, 0);
break;
case VK_END:
SendMessage(hwnd, WM_VSCROLL, SB_BOTTOM, 0);
break;
case VK_PRIOR:
SendMessage(hwnd, WM_VSCROLL, SB_PAGEUP, 0);
break;
case VK_NEXT:
SendMessage(hwnd, WM_VSCROLL, SB_PAGEDOWN, 0);
break;
case VK_UP:
SendMessage(hwnd, WM_VSCROLL, SB_LINEUP, 0);
break;
case VK_DOWN:
SendMessage(hwnd, WM_VSCROLL, SB_LINEDOWN, 0);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR ipCmdLine, int nCmdShow){
HWND hwnd;
MSG msg;
WNDCLASS wndClass; wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = wndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.lpszMenuName = NULL;
wndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wndClass.lpszClassName = TEXT("Hello"); if(!RegisterClass(&wndClass)){
return 0;
}
hwnd = CreateWindow(TEXT("Hello"),
TEXT("Hello"),
WS_OVERLAPPEDWINDOW | WS_VSCROLL,
0,
0,
500,
500,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}按了END,HOME,UP,DOWN,PAGE UP,PAGE DOWN以后,屏幕上的显示发生了变化,但是不知道为什么滚动条的位置没有发生变化
HDC hdc;
PAINTSTRUCT ps;
TEXTMETRIC tm;
SCROLLINFO si;
static int cxChar, cyChar, cxCap, cxClient, cyClient;
int iVertPos;
switch(message){
case WM_CREATE:
hdc = GetDC(hwnd);
GetTextMetrics(hdc, &tm);
cxChar = tm.tmAveCharWidth;
cxCap = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
cyChar = tm.tmHeight + tm.tmExternalLeading;
ReleaseDC(hwnd,hdc);
return 0;
case WM_SIZE:
cyClient = HIWORD(lParam);
si.cbSize = sizeof(si);
si.fMask = SIF_RANGE | SIF_PAGE;
si.nMin = 0;
si.nMax = 200;
si.nPage = cyClient / cyChar;
SetScrollInfo(hwnd, SB_VERT, &si, true);
return 0;
case WM_VSCROLL:
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
GetScrollInfo(hwnd,SB_VERT,&si);
iVertPos = si.nPos;
switch(LOWORD(wParam)){
case SB_TOP:
si.nPos = si.nMin;
break;
case SB_BOTTOM:
si.nPos = si.nMax;
break;
case SB_LINEUP:
si.nPos -= 1;
break;
case SB_LINEDOWN:
si.nPos += 1;
break;
case SB_PAGEUP:
si.nPos -= si.nPage;
break;
case SB_PAGEDOWN:
si.nPos += si.nPage;
break;
case SB_THUMBTRACK:
si.nPos = si.nTrackPos;
break;
default:
break;
}
si.fMask = SIF_POS;
SetScrollInfo(hwnd, SB_VERT, &si, false);
GetScrollInfo(hwnd, SB_VERT, &si);
if(si.nPos != iVertPos){
ScrollWindow(hwnd, 0, cyChar * (iVertPos - si.nPos), NULL, NULL);
UpdateWindow(hwnd);
}
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
GetScrollInfo(hwnd, SB_VERT, &si);
iVertPos = si.nPos;
for(int i = 0;i <= 200;++i){
TCHAR buffer[10];
int length = wsprintf(buffer, TEXT("%d"), i);
TextOut(hdc, 0, (i - iVertPos) * cyChar, buffer, length);
}
EndPaint(hwnd, &ps);
return 0;
case WM_KEYDOWN:
switch(wParam){
case VK_HOME:
SendMessage(hwnd, WM_VSCROLL, SB_TOP, 0);
break;
case VK_END:
SendMessage(hwnd, WM_VSCROLL, SB_BOTTOM, 0);
break;
case VK_PRIOR:
SendMessage(hwnd, WM_VSCROLL, SB_PAGEUP, 0);
break;
case VK_NEXT:
SendMessage(hwnd, WM_VSCROLL, SB_PAGEDOWN, 0);
break;
case VK_UP:
SendMessage(hwnd, WM_VSCROLL, SB_LINEUP, 0);
break;
case VK_DOWN:
SendMessage(hwnd, WM_VSCROLL, SB_LINEDOWN, 0);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR ipCmdLine, int nCmdShow){
HWND hwnd;
MSG msg;
WNDCLASS wndClass; wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = wndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.lpszMenuName = NULL;
wndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wndClass.lpszClassName = TEXT("Hello"); if(!RegisterClass(&wndClass)){
return 0;
}
hwnd = CreateWindow(TEXT("Hello"),
TEXT("Hello"),
WS_OVERLAPPEDWINDOW | WS_VSCROLL,
0,
0,
500,
500,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}按了END,HOME,UP,DOWN,PAGE UP,PAGE DOWN以后,屏幕上的显示发生了变化,但是不知道为什么滚动条的位置没有发生变化
解决方案 »
- 请教如何得到指定进程和网络通信的数据包和阻止指定IP的数据包呢?
- (急问,200分)CSplitterWnd 可以直接用CWnd填充吗? CSplitterWnd是不是非要用在Doc/View下?
- 鼠标拖动
- 关于CreateCompatibleDC
- 继续提问,关于drawtext换行问题再研究
- 如何用扩展的动态连接库实现非模式对话框
- sql增量备份
- 有办法让dll自己运行代码?而不是用函数调用的形式
- 一道离散数学问题。
- 太笨了! LPSTR a_b[]={"1","2","3"};... for(int i=0;a_b[i]!=NULL;i++){...} 运行时 i=??10;a_b[4..10]=".."其他的值?
- 关于if的问题
- 请教一个网络拆包的问题
#include "Windows.h"
LRESULT CALLBACK wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
HDC hdc;
PAINTSTRUCT ps;
TEXTMETRIC tm;
SCROLLINFO si;
static int cxChar, cyChar, cxCap, cxClient, cyClient;
int iVertPos;
switch(message){
case WM_CREATE:
hdc = GetDC(hwnd);
GetTextMetrics(hdc, &tm);
cxChar = tm.tmAveCharWidth;
cxCap = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
cyChar = tm.tmHeight + tm.tmExternalLeading;
ReleaseDC(hwnd,hdc);
return 0;
case WM_SIZE:
cyClient = HIWORD(lParam);
si.cbSize = sizeof(si);
si.fMask = SIF_RANGE | SIF_PAGE;
si.nMin = 0;
si.nMax = 200;
si.nPage = cyClient / cyChar;
SetScrollInfo(hwnd, SB_VERT, &si, true);
return 0;
case WM_VSCROLL:
si.cbSize = sizeof(si);
si.fMask = SIF_ALL;
GetScrollInfo(hwnd,SB_VERT,&si);
iVertPos = si.nPos;
switch(LOWORD(wParam)){
case SB_TOP:
si.nPos = si.nMin;
break;
case SB_BOTTOM:
si.nPos = si.nMax;
break;
case SB_LINEUP:
si.nPos -= 1;
break;
case SB_LINEDOWN:
si.nPos += 1;
break;
case SB_PAGEUP:
si.nPos -= si.nPage;
break;
case SB_PAGEDOWN:
si.nPos += si.nPage;
break;
case SB_THUMBTRACK:
si.nPos = si.nTrackPos;
break;
default:
break;
}
si.fMask = SIF_POS;
SetScrollInfo(hwnd, SB_VERT, &si, false);
GetScrollInfo(hwnd, SB_VERT, &si);
if(si.nPos != iVertPos){
SetScrollPos(hwnd, SB_VERT, si.nPos, TRUE);
ScrollWindow(hwnd, 0, cyChar * (iVertPos - si.nPos), NULL, NULL);
UpdateWindow(hwnd);
}
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
GetScrollInfo(hwnd, SB_VERT, &si);
iVertPos = si.nPos;
for(int i = 0;i <= 200;++i){
TCHAR buffer[10];
int length = wsprintf(buffer, TEXT("%d"), i);
TextOut(hdc, 0, (i - iVertPos) * cyChar, buffer, length);
}
EndPaint(hwnd, &ps);
return 0;
case WM_KEYDOWN:
switch(wParam){
case VK_HOME:
SendMessage(hwnd, WM_VSCROLL, SB_TOP, 0);
break;
case VK_END:
SendMessage(hwnd, WM_VSCROLL, SB_BOTTOM, 0);
break;
case VK_PRIOR:
SendMessage(hwnd, WM_VSCROLL, SB_PAGEUP, 0);
break;
case VK_NEXT:
SendMessage(hwnd, WM_VSCROLL, SB_PAGEDOWN, 0);
break;
case VK_UP:
SendMessage(hwnd, WM_VSCROLL, SB_LINEUP, 0);
break;
case VK_DOWN:
SendMessage(hwnd, WM_VSCROLL, SB_LINEDOWN, 0);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
} int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR ipCmdLine, int nCmdShow){
HWND hwnd;
MSG msg;
WNDCLASS wndClass; wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = wndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.lpszMenuName = NULL;
wndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wndClass.lpszClassName = TEXT("Hello"); if(!RegisterClass(&wndClass)){
return 0;
} hwnd = CreateWindow(TEXT("Hello"),
TEXT("Hello"),
WS_OVERLAPPEDWINDOW | WS_VSCROLL,
0,
0,
500,
500,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}
加了这么一句话
我明明插入的颜色,怎么没颜色呢
这样也可以