
Microsoft flexGrid控件在表格控件中应用广泛。在开发过程中,需要根据具体情况设置控件的行为。当用户点击表格中的某一格时,首先判断该列的属性,决定是直接编辑还是通过下拉列表进行选择。
接下来,程序会显示或隐藏相应的文本控件或下拉列表控件,位置和大小与选中的格子完全一致,以覆盖选中的格子。程序会将选中的格子的内容填充到文本控件或下拉列表控件中。用户修改完毕后,新的内容会填充回选中的格子,并隐藏文本控件或下拉列表控件。
具体实现时,可以通过变量定义来初始化这些控件,如CComboBox m_ChangeCombo、CEdit m_Change等。此外,还需要定义一个字符串变量m_sChange与文本控件关联,以及CMSFlexGrid m_FlexGrid作为表格控件。
在表格点击事件中,首先获取用户点击的行号和列号。若点击区域超过表格的最大行号或标题行,则返回。接着,获取表格控件的窗口矩形,并将其转换为客户区矩形。随后,将缇(twips)单位转换为像素单位,计算选中格的左上角坐标和尺寸,形成选中格所在的矩形区域。最后,根据列属性决定显示文本控件或下拉列表控件,并填充选中格的内容。
当用户编辑文本控件后,按下回车键会将新的文本信息填充回选中的格子。同样地,当用户编辑下拉列表控件后,新的信息也会填充回选中的格子。
整个程序结构较为简单,但通过灵活使用文本控件和下拉列表控件,可以满足不同列的不同信息需求。如果表格中列较多,属性各不相同,可以尝试使用更复杂的控件来编辑信息。此外,还可以同时创建多个文本控件和下拉列表控件,以对应不同列的不同信息要求。
虽然当前有许多类似的应用实例,但在开发此程序时,笔者并未参考现有资料。因此,可能在方法上并不一定是最简单的,但确实效果不错,应对一般情况是没有问题的。如果对此有疑问或有新的想法,可以与笔者讨论,联系邮箱:happyparrot@126.com。