界面高手请入

zzdaa 2002-05-03 05:05:00
我用CRectTracker做类似于Acdsee那样的橡皮筋矩形选框的时候,当橡皮筋移动到窗口可视部分以外的时候,CScrollview的滚动条不能滚动,于是我手动加上了滚动的代码,但这个时候,拖动过程中的矩形框却显示不出来了,请问各位对这个问题有了解吗?我估计是由于视图滚动造成了坐标系统不一致引起的,请那个知道的帮忙解决一下这个问题
...全文
135 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
King_Cpp 2002-05-06
  • 打赏
  • 举报
回复
还是帮你顶一把吧!!
RodgerLiang 2002-05-06
  • 打赏
  • 举报
回复
I think you shall not use CRectTracker to response the message.
You can use function CRectTracker::Track to track the moving of the CRectTracker.
If you need I can give you a project about use the CRectTracker.
zzdaa 2002-05-03
  • 打赏
  • 举报
回复
rodgerliang,
我指的是在鼠标来回动的时候那个橡皮筋显示不正确,而CRectTracker本身截获了window的onlbuttondown消息,如何能在onDraw里面画的了呢?

hover(翔)(想弄几颗红星星玩玩)
这个东西真是让人头疼,反复查也找不到问题。
RodgerLiang 2002-05-03
  • 打赏
  • 举报
回复
I think you should draw the CRectTracker in ScrollView's OnDraw()
function. And calculate the position
Hover 2002-05-03
  • 打赏
  • 举报
回复
调试你的程序,看看m_rect的坐标是否正确.
zzdaa 2002-05-03
  • 打赏
  • 举报
回复
我把CrectTracker中的TrackerHandle的代码直接拷贝了出来,在消息循环的尾部加上了滚动视图的代码,问题就这样出现了。

for (;;)
{

MSG msg;
VERIFY(::GetMessage(&msg, NULL, 0, 0));

if (CWnd::GetCapture() != pWnd)
break;



switch (msg.message)
{
// handle movement/accept messages
case WM_LBUTTONUP:
case WM_MOUSEMOVE:
rectOld = m_rect;
// handle resize cases (and part of move)
if (px != NULL)
*px = (int)(short)LOWORD(msg.lParam) - xDiff;
if (py != NULL)
*py = (int)(short)HIWORD(msg.lParam) - yDiff;

// handle move case
if (nHandle == hitMiddle)
{
m_rect.right = m_rect.left + nWidth;
m_rect.bottom = m_rect.top + nHeight;
}
// allow caller to adjust the rectangle if necessary
AdjustRect(nHandle, &m_rect);

// only redraw and callback if the rect actually changed!
m_bFinalErase = (msg.message == WM_LBUTTONUP);
if (!rectOld.EqualRect(&m_rect) || m_bFinalErase)
{
if (bMoved)
{
m_bErase = TRUE;
DrawTrackerRect(&rectOld, pWndClipTo, pDrawDC, pWnd);
}
OnChangedRect(rectOld);
if (msg.message != WM_LBUTTONUP)
bMoved = TRUE;
}
if (m_bFinalErase)
goto ExitLoop;

if (!rectOld.EqualRect(&m_rect))
{
m_bErase = FALSE;
DrawTrackerRect(&m_rect, pWndClipTo, pDrawDC, pWnd);
}
break;

// handle cancel messages
case WM_KEYDOWN:
if (msg.wParam != VK_ESCAPE)
break;
case WM_RBUTTONDOWN:
if (bMoved)
{
m_bErase = m_bFinalErase = TRUE;
DrawTrackerRect(&m_rect, pWndClipTo, pDrawDC, pWnd);
}
m_rect = rectSave;
goto ExitLoop;

// just dispatch rest of the messages
default:

DispatchMessage(&msg);
break;
}
((CPSChiperView*)pWnd)->GetClientRect(&ClientRect);
POINT ScrollPoint = ((CPSChiperView*)pWnd)->GetScrollPosition();
if (rectOld.right >ClientRect.right)
{
ScrollPoint.x += 10;
}
if (rectOld.right <ClientRect.left)
{
ScrollPoint.x -= 10;
}
if (rectOld.bottom <ClientRect.top)
{
ScrollPoint.y -= 10;
}
if (rectOld.bottom >ClientRect.bottom)
{
ScrollPoint.y += 10;
}
((CPSChiperView*)pWnd)->ScrollTo(ScrollPoint);
pDrawDC->SetViewportOrg(ScrollPoint);
pDrawDC->DPtoLP(m_rect);
((CPSChiperView*)pWnd)->Invalidate();

}
zzdaa 2002-05-03
  • 打赏
  • 举报
回复
终于有人回答了,谢谢,但是问题是出在这里

我在CRectTRacker的MFC代码里也看到了m_rect是窗口坐标,但是那句画线的语句DrwDragRect 却是直接画了m_rect,而DrawDragRect在msdn的帮助里是对逻辑坐标处理的呀,不明白。
RodgerLiang 2002-05-03
  • 打赏
  • 举报
回复
You can find the data member of CRectTracker::m_rect means :
The current position of the rectangle in client coordinates (pixels).

so if you scroll the view , you have to calculate the position.
Could you paste the code of drawing CRectTracker.

Hover 2002-05-03
  • 打赏
  • 举报
回复
将你获得的Mouse坐标用CDC的DPtoLP转换成逻辑坐标再处理
zzdaa 2002-05-03
  • 打赏
  • 举报
回复
高手呀,你快出现吧
zzdaa 2002-05-03
  • 打赏
  • 举报
回复
没有人知道吗?
内容概要:本文档为《PCI Express CEM Specification, Revision 5.0, Version 1.0》的技术勘误表(Errata),发布于2021年8月3日,共包含21项修订记录。主要针对原规范中的文本错误(TXT)、术语使用不当或格式问题进行修正,涉及信号定义、材料要求、尺寸参数、表格引用、注释说明等多个技术细节。部分修改明确了关键信号如SENSE0/SENSE1的使用条件,调整了连接器测试夹具推荐做法,并统一了术语表述以避免歧义。所有修订均经过CEM工作组讨论确认,其中多数已被采纳(绿色标记),个别仍需进一步讨论(橙色标记)。; 适合人群:从事PCIe接口设计、高速电路开发、硬件合规性测试的工程师及相关技术人员;熟悉PCIe标准并参与硬件产品开发的1-3年经验研发人员。; 使用场景及目标:①帮助开发者准确理解PCIe CEM规范中关于高功率连接器、边带信号、PCB布局等关键技术要求;②指导硬件设计与测试过程中规避因文档歧义导致的实现错误;③确保产品符合最新规范版本的电气与机械设计标准; 阅读建议:此资源为规范性文件的补充修正,建议结合原始CEM Specification文档对照阅读,重点关注标红、标绿和标橙的反馈状态,及时更新设计依据,并在实际项目中验证相关修改项的应用一致性。
内容概要:本文是一份针对全国计算机等级考试(NCRE)二级的全面备考指南,覆盖MS Office高级应用与设计、C语言程序设计和Python语言程序设计三大主流科目。文档按照“认知→题库→实战→冲刺”四步递进结构组织,系统介绍了考试基本信息、报名时间、考试形式、合格标准及科目选择建议,并深入剖析各科高频考点、真题规律与操作技巧。重点内容包括MS Office中的Word长文档排版、Excel函数应用与PPT动画设计;C语言中的指针、数组、函数及程序调试;Python中的基础语法、标准库(如turtle、random)与第三方库(如jieba、wordcloud、matplotlib)的应用。此外,还提供公共基础知识精讲、操作题逐步教学、易错题集锦、模拟软件使用指南和科学的时间管理策略,帮助考生高效备考。; 适合人群:零基础小白、临考突击型考生以及多次未通过的考生,尤其适合非计算机专业希望提升办公技能或理工科学生准备编程语言认证的学习者。; 使用场景及目标:①系统掌握NCRE二级考试所需的知识与实操技能;②通过刷真题、模拟考试和错题复盘提高应试能力;③在短时间内实现从入门到通关的跨越,一次性通过考试。; 阅读建议:建议按文档顺序逐步学习,结合官方考纲和真题进行实践操作,重视动手练习而非仅理论阅读,临考前使用模拟软件全真演练,强化时间分配与答题策略。

604

社区成员

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

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