我用Mousemove消息来让鼠标拖动图片,现在可以实现了,当发现总是移动几次后就不能动了,手机像死机一样。本来以为是内存泄露了,但我的程序里没有对数据操作,请问是哪里的问题呢?
解决方案 »
- 读取一个图片文件将其数据信息以16进制保存到txt文件中??
- 我的可执行文件 DSCT.cpp 全变成二进制了,怎么转换过来???
- 利用二叉树写的实数计算器, 请大家提提意见
- 解析字符串,散分咯....
- 一个很难的问题,在我的键盘钩子中,怎么屏蔽网页中的密码?
- 查找字符串时,如何忽略‘\0’?在线
- 有谁知道TM3.0说的免费短信150条是真的 吗?谁会用?教教我....谢谢!
- 一个下问题,关于控件
- 请问哪儿有VWINOWS的系统消息说明
- 为什么就算我没有设置settimer,ontimer依然会运行几次,而我设了settimer,ontimer依然只运行几次
- openfilename 具体使用方法
- 移动对话框时不显示虚线边框
1.自己Debug
2.贴代码出来
void MainWnd::OnPaint(HWND hWnd)
{
DEBUGMSG(TRUE, (TEXT("MainWnd::OnPaint\n")));
PAINTSTRUCT ps = {0};
HDC hdc = BeginPaint(hWnd, &ps); // 在此添加任意绘图代码 RECT m_rc = {0};
GetClientRect(hWnd, &m_rc);
//创建双缓冲
HDC g = CreateCompatibleDC(hdc);
HBITMAP buffer=CreateCompatibleBitmap(hdc,m_rc.right-m_rc.left,m_rc.bottom-m_rc.top);
HBITMAP m_hOldbmp = (HBITMAP)SelectObject(g, buffer);
HDC imgdc=CreateCompatibleDC(hdc); //临时dc
HBITMAP m_hOldbmp1 = (HBITMAP)SelectObject(imgdc, m_hScrollBar);
BitBlt(g, 225, 50 , 11, 195 , imgdc, 0, 0, SRCCOPY);
SelectObject(imgdc, m_hScrollUp);
BitBlt(g, 225, 50 , 11, 11 , imgdc, 0, 0, SRCCOPY);
SelectObject(imgdc, m_hScrollDown);
BitBlt(g, 225, (243 - 11) , 11, 11 , imgdc, 0, 0, SRCCOPY); //滚动块Y坐标在随时变化
for(int i=0; i <10; ++i)
{
SelectObject(imgdc, m_hScrollBox);
BitBlt(g, 225, (m_nScrolltop + i), 11, 10 , imgdc, 0, 0, SRCCOPY);
}
SelectObject(imgdc, m_hOldbmp1);
DeleteDC(imgdc);
imgdc = NULL;
//最后显示到hdc
BitBlt(hdc, m_rc.left, m_rc.top, m_rc.right-m_rc.left,m_rc.bottom-m_rc.top, g, 0, 0, SRCCOPY);
SelectObject(g, m_hOldbmp);
DeleteDC(g);
g = NULL;
EndPaint(hWnd, &ps);
} //左键按下消息
void MainWnd::OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
{
DWORD point;
POINT cpDown={0};
point=GetMessagePos();
cpDown.x=LOWORD(point);
cpDown.y=HIWORD(point); m_nDownX = cpDown.x; //记录按下位置
m_nDownY = cpDown.y;
}
//WM_Mousemove消息
void MainWnd::OnMousemove(HWND hwnd, int x, int y, UINT keyFlags)
{
//移动滚动块
//判断点击滚动条范围
if(m_nDownX > 225 && m_nDownY > (50 + 11) && m_nDownY < (243 - 11))
{
m_nScrolltop = y;
}
InvalidateRect(hwnd, NULL, TRUE);
::UpdateWindow(hwnd);
} 哪里不对呢? 谢谢大家帮忙
我觉得没有必要在mousemove里刷新,
可以用OnMouseHover,及ontime啊.
{
if(m_bMouseMove)
{
.......
}
}
然后设置 SetTimer(1,50,NULL);//设置0.05秒刷新一次