怎样能用鼠标滚轮控制窗口缩放?我理解有误,请指向我的错误,必给出代码
#include <Windows.h>HINSTANCE g_hInstance;
LRESULT CALLBACK WndProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch(uMsg)
{
case WM_MOUSEWHEEL:
{
int n = HIWORD(wParam);//向前滚正值 向后滚负值
static int i = n; //i保存上一次n的值
RECT rc;
GetClientRect(hWnd,&rc);
if(n > i) //如果n大于上一次n的值,则说明鼠标滚轮向前滚
{
MoveWindow(hWnd,rc.left--,rc.top--,rc.right++,rc.bottom++,TRUE);
}
else
{
MoveWindow(hWnd,rc.left++,rc.top++,rc.right--,rc.bottom--,TRUE);
}
}
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
void RegisterWnd(LPCTSTR lpClassName)
{
WNDCLASSEX wce;
wce.style = CS_HREDRAW|CS_VREDRAW;
wce.lpfnWndProc = WndProc;
wce.cbSize = sizeof(WNDCLASSEX);
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hInstance = g_hInstance;
wce.hIcon= 0;
wce.hCursor = 0;
wce.hIconSm = 0;
wce.hbrBackground = HBRUSH(COLOR_BTNFACE);
wce.lpszClassName = lpClassName;
wce.lpszMenuName = 0;
if(!RegisterClassEx(&wce))
{
MessageBox(NULL,TEXT("注册失败"),TEXT("提示"),MB_OK);
}
}
HWND CreateWnd(LPCTSTR lpClassName)
{
HWND hWnd = CreateWindowEx(0,lpClassName,L"HELLO",
WS_OVERLAPPEDWINDOW,500,200,
500,500,NULL,NULL,g_hInstance,NULL);
return hWnd;
}
void DisplayWnd(HWND hWnd)
{
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
void Message()
{
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInstance = hInstance;
RegisterWnd(L"hello");
HWND hWnd = CreateWnd(L"hello");
DisplayWnd(hWnd);
Message();
return 0;
}
本帖最后由 风之残月 于 2014-11-16 23:11 编辑
问题看错了,再看了下标题,这是我改的
case WM_MOUSEWHEEL:
{
RECT rc;
GetWindowRect(hWnd,&rc);
if((short)HIWORD(wParam) > 0)
{
MoveWindow(hWnd,rc.left--,rc.top--,rc.right-rc.left+1,rc.bottom-rc.top+1,TRUE);
}
else
{
MoveWindow(hWnd,rc.left++,rc.top++,rc.right-rc.left-1,rc.bottom-rc.top-1,TRUE);
}
}
break;
GetClientRect(hWnd,&rc); 这个函数是用来获取窗口工作区域的位置坐标信息,需要用GetWindowRect获取窗口相对于屏幕的坐标信息,MoveWindow的第三个参数是宽度,第四个是高度,判断是否是向前滚动一般是用(short)HIWORD(wParam),当它为正数时为向上,负数时为向下
支持楼主{:9_241:} 我可能是 监视hook
怎么实现我不知道{:9_240:} 小人 发表于 2014-11-16 12:58
我可能是 监视hook
怎么实现我不知道
{:7_138:}不知道就不要回呀 拈花小仙 发表于 2014-11-16 12:01
不知道就不要回呀
c语言的具体实现步骤不知道
不过可以通过 鼠标事件的hook 来判断鼠标的动作从而来设置 拈花小仙 发表于 2014-11-16 12:01
不知道就不要回呀
百度下应该就有了,鼠标钩子,安装钩子 ,监视钩子,卸载钩子 小人 发表于 2014-11-16 20:04
百度下应该就有了,鼠标钩子,安装钩子 ,监视钩子,卸载钩子
不用这么麻烦吧 拈花小仙 发表于 2014-11-16 12:04
不用这么麻烦吧
或许都其他途径吧,但是我想到的就是这个{:9_240:} 不用这么麻烦,用WM_MOUSEMOVE消息就可以了,使用
xPos = GET_X_LPARAM(lParam); // 相对于客户区左上角的 X 坐标
yPos = GET_Y_LPARAM(lParam); //相对于客户区左上角的 Y 坐标
:sweat:看错了,我看成是获取鼠标位置了
页:
[1]