【发布时间】:2014-08-25 22:51:40
【问题描述】:
好的,我正在尝试了解如何在 Windows 中构建“控件”的基础知识。我不知道 ListView 控件(例如)中的各个点和部分是如何绘制的。
让我们使用一个 ListView,并在其中添加 3 个项目。
这些项目是如何到达那里的?
- 他们是否在列表视图的 OnPaint 事件中在列表视图控件内的指定位置绘制列表项文本? (例如:listView1_Paint(...) { graphics.DrawString(...); }
当用户选择一个项目时,他们如何选择一个项目? - 他们是否: 在 on mouse down 事件中获取鼠标的 x & y 坐标,然后在内部列表中查找在该位置绘制的任何项目,然后在该位置用不同颜色的背景重新绘制该特定项目以传达给用户该项目已被选中?
当用户已经选择了一个项目然后按下向上或向下箭头键时,他们如何知道要选择哪个项目(以及如何选择)? - 他们是否获得了最后一个选定项目的绳索,然后调整这些坐标以使其与下一个要选择的项目保持一致?
最后,如果以我所说的方式“绘制”文本,那么基本上它只是像素,对吧?那么,当用户单击同一位置时,我应该如何“知道”文本所说的内容。我是否应该将所有以字符串形式绘制的文本连同坐标一起存储在 List 中?
【问题讨论】:
-
您可以对控件进行子类化并查看发送给它的消息。请记住,在某些情况下(滚动条),您无法拦截内部发送的消息。
标签: c# .net winforms drawing gdi+