求助:光标为什么要偏离?

mzy2003 2006-06-21 04:08:42
当光标移动到指定位置时,调用函数::SetCursor(hCursor)变成另一种光标,可是当到达指定位置时,光标变了,可是变化后的光标却向右偏离指定位置。请问大虾这是怎么回事?那些因素可能导致这种情况发生?
...全文
258 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mzy2003 2006-11-20
  • 打赏
  • 举报
回复
严重感谢jerry4711,按照你得方法,果然行了。光标就不偏移了。
dasiu 2006-11-16
  • 打赏
  • 举报
回复
光标坐标设置错误
光标的坐标是屏幕坐标,你设置的有可能是client坐标
jerry4711 2006-11-15
  • 打赏
  • 举报
回复
光标资源文件一般为32X32的2色或16色.CUR图形文件,可根据实现的功能来具体确定光标图案或直接使用WINDOWS 系统中提供的光标资源文件,当自己利用资源编辑器绘制光标图案后,还需要利用DEBUG. EXE程序修改光标资源文件中的鼠标光标显示偏移坐标,以便光标图案能象WINDOWS 系统中的动态提示光标一样,动态提示时光标图案中心点正好处于屏幕的当前位置。这个偏移坐标值位于光示资源文件中的10和12处的双字节位置,如动态提示光标资源文件名为MOUSEM.CUR,要使32X32(2色)的光标图形显示时图案的中心点正好处于当前屏幕位置,其修改方法如下:

  C>DEBUG MOUSEM.CUR

  -E 10A

  XXXX:10A 00.10 00.00 00.10 00.00

  -W

  建立起自己的鼠标光标资源文件后,首先需要在应用程序的资源文件中定义鼠标光标,资源文件中的定义方法为:

  imecurm CURSOR mousem.cur

  鼠标光标资源文件只有在定义之后,才能在应用程序中利用LoadCursor()函数调入内存使用,其调用方法为:

  HCURSOR hCurm;//将鼠标光标资源文件数据调入内存

  hCurm=LoadCursor(hInstance,"imecurm");
mzy2003 2006-11-15
  • 打赏
  • 举报
回复
up一下,请继续关注下!
mzy2003 2006-06-22
  • 打赏
  • 举报
回复
另我郁闷的是将IECtrlBar改成我自己程序的界面,并且将其CView改成CListView运行,也不出现这个情况。郁闷死了。
mzy2003 2006-06-22
  • 打赏
  • 举报
回复
谢谢,那如何设置光标的热点坐标?
  • 打赏
  • 举报
回复
应该是光标热点坐标导致的!
mzy2003 2006-06-21
  • 打赏
  • 举报
回复
还有我的视图是CListView,IECtrlBar是CView.
mzy2003 2006-06-21
  • 打赏
  • 举报
回复
在原代码基础上有如下改动:
CSize CIEBar::CalcDynamicLayout(int nLength, DWORD dwMode)
{
// get rectangle for main frame
CRect t_FrmRc;
GetDockingFrame()->GetClientRect(&t_FrmRc);
CMainFrame *pMainWnd=(CMainFrame*)AfxGetMainWnd();
int flag=0;
if(((pMainWnd->m_wndToolBar.GetStyle() & WS_VISIBLE) !=0) && ((pMainWnd->m_wndStatusBar.GetStyle() & WS_VISIBLE) !=0))
flag=1;//工具条和状态条都可见
if(((pMainWnd->m_wndToolBar.GetStyle() & WS_VISIBLE) ==0) && ((pMainWnd->m_wndStatusBar.GetStyle() & WS_VISIBLE) !=0))
flag=2;//工具条不可见
if(((pMainWnd->m_wndToolBar.GetStyle() & WS_VISIBLE) !=0) && ((pMainWnd->m_wndStatusBar.GetStyle() & WS_VISIBLE) ==0))
flag=3;//状态条不可见
if(((pMainWnd->m_wndToolBar.GetStyle() & WS_VISIBLE) ==0) && ((pMainWnd->m_wndStatusBar.GetStyle() & WS_VISIBLE) ==0))
flag=4;//工具条和状态条都不可见


// resize tree control size
if(pTreeCtrl)
{
if(pTreeCtrl->m_hWnd != NULL)
{
CRect t_TreeRc;
switch(flag)
{
case 1:
t_TreeRc=CRect(5, 2/*8*/, m_cxIEBar-2-IE_FRM_WIDTH, t_FrmRc.Height() - 67);//51);
break;
case 2:
t_TreeRc=CRect(5, 2/*8*/, m_cxIEBar-2-IE_FRM_WIDTH, t_FrmRc.Height() - 45);//51);
break;
case 3:
t_TreeRc=CRect(5, 2/*8*/, m_cxIEBar-2-IE_FRM_WIDTH, t_FrmRc.Height() - 50);//51);
break;
case 4:
t_TreeRc=CRect(5, 2/*8*/, m_cxIEBar-2-IE_FRM_WIDTH, t_FrmRc.Height() - 27);//51);
break;
default:
t_TreeRc=CRect(5, 2/*8*/, m_cxIEBar-2-IE_FRM_WIDTH, t_FrmRc.Height() - 45);//51);
break;
}
t_TreeRc.top += m_cyTitle + 1;
pTreeCtrl->MoveWindow(&t_TreeRc);
}
}

// set IE bar size
return CSize(m_cxIEBar, t_FrmRc.Height());
}

void CIEBar::DrawFrm(CDC& dc)
{
CRect t_ClientRc;
GetClientRect(&t_ClientRc);
t_ClientRc.DeflateRect(3, 1/*6*/, IE_FRM_WIDTH, 1);//49);

dc.SelectStockObject(NULL_BRUSH);
dc.Draw3dRect(&t_ClientRc,
::GetSysColor(COLOR_GRAYTEXT),
::GetSysColor(COLOR_GRAYTEXT));

dc.SelectStockObject(WHITE_PEN);
// draw left single line
dc.MoveTo(t_ClientRc.left + 1, t_ClientRc.top + 1);
dc.LineTo(t_ClientRc.left + 1, t_ClientRc.bottom - 1);
// draw top single line
dc.MoveTo(t_ClientRc.left + 1, t_ClientRc.top + 1);
dc.LineTo(t_ClientRc.right - 1, t_ClientRc.top + 1);
// draw right single line
dc.MoveTo(t_ClientRc.right, t_ClientRc.top);
dc.LineTo(t_ClientRc.right, t_ClientRc.bottom);
// draw bottom single line
dc.MoveTo(t_ClientRc.left, t_ClientRc.bottom);
dc.LineTo(t_ClientRc.right + 1, t_ClientRc.bottom);

// get virtual rectangle
//GetClientRect(&t_ClientRc);
m_VirClientRc = t_ClientRc;
m_VirClientRc.InflateRect(-1, -1, 0, 0);
}
主要是调整了几个数,这些调整也比较另我费解。
mzy2003 2006-06-21
  • 打赏
  • 举报
回复
就是做一个类似资源管理器右边树列表窗口,当鼠标移到右边框时变拖动鼠标。代码来致于网上搜到的一个程序叫IECtrlBar,这个程序不出现这个情况,但我的程序在主界面加了个CReBar,CReBar上放工具条和一个CComboBoxEx,运行后就出现这个情况。
livedeal 2006-06-21
  • 打赏
  • 举报
回复
一般是不会的,是不是你的代码有问题啊`贴出来看看

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧