offsetrectMFC做表格的控件

offsetrect  时间:2021-01-14  阅读:()

怎样将这个delphi 窗体颜色效果变成控件的显示?

不传入paintbox的句柄,直接操作paintbox控件就可以了。

我修改了一下,其中方法的句柄无用:(TGradientDirection对象不知道是什么,也去掉了) procedure TForm1.FillGradient(DC: HDC; ARect: TRect;StartColor, EndColor: TColor); var StartRGB,EndRGB: array [0..2] of Byte; RGBKoef: array [0..2] of Double; Brush: HBRUSH; ColorCount: Integer; AreaWidth, AreaHeight, I: Integer; ColorRect: TRect; RectOffset: Double; IntR,IntG,IntB :Integer; begin RectOffset := 0; StartColor := ColorToRGB(StartColor); EndColor := ColorToRGB(EndColor); StartRGB[0] := GetRValue(StartColor); StartRGB[1] := GetGValue(StartColor); StartRGB[2] := GetBValue(StartColor); EndRGB[0] := GetRValue(EndColor); EndRGB[1] := GetGValue(EndColor); EndRGB[2] := GetBValue(EndColor); IntR :=(EndRGB[0] - StartRGB[0]); IntG :=(EndRGB[1] - StartRGB[1]); IntB :=(EndRGB[2] - StartRGB[2]); ColorCount := max(abs(IntR), max(abs(IntG), abs(IntB))); RGBKoef[0] := IntR / ColorCount; RGBKoef[1] := IntG / ColorCount; RGBKoef[2] := IntB / ColorCount; AreaWidth := ARect.Right - ARect.Left; AreaHeight := ARect.Bottom - ARect.Top; // case ADirection of // gdHorizontal: RectOffset := AreaWidth / ColorCount; // gdVertical: // RectOffset := AreaHeight / ColorCount; // end; for I := 0 to ColorCount - 1 do begin Brush := CreateSolidBrush(RGB( StartRGB[0] + Round((I + 1) * RGBKoef[0]), StartRGB[1] + Round((I + 1) * RGBKoef[1]), StartRGB[2] + Round((I + 1) * RGBKoef[2]))); SetRect(ColorRect, Round(RectOffset * I), 0, Round(RectOffset * (I + 1)), AreaHeight); OffsetRect(ColorRect, ARect.Left, ARect.Top); PaintBox1.Canvas.Brush.Handle := Brush; PaintBox1.Canvas.FillRect(ColorRect); DeleteObject(Brush); end; end; 调用: FillGradient(GetDC(PaintBox1.Canvas.Handle),PaintBox1.ClientRect,clyellow,clblue);

java中 JTextArea类的属性和方法是什么

JTextArea: void append(String str) 将给定文本追加到文档结尾。

protected Document createDefaultModel() 如果没有显式给出构造时要使用的模型,则创建该模型的默认实现。

essibleContext essibleContext() 获取与此 JTextArea 关联的 essibleContext。

int getColumns() 返回 TextArea 中的列数。

protected int getColumnWidth() 获取列的宽度。

int getLineCount() 确定文本区中所包含的行数。

int getLineEndOffset(int line) 确定给定行结尾处的偏移量。

int getLineOfOffset(int offset) 将组件文本中的偏移量转换为行号。

int getLineStartOffset(int line) 确定给定行起始处的偏移量。

boolean getLineWrap() 获取文本区的换行策略。

Dimension getPreferredScrollableViewportSize() 如果此组件被嵌入 JScrollPane 中,则返回 viewport 的首选大小。

Dimension getPreferredSize() 返回 TextArea 的首选大小。

protected int getRowHeight() 定义行高的意义。

int getRows() 返回 TextArea 中的行数。

boolean getScrollableTracksViewportWidth() 如果 viewport 总是强制要求此 Scrollable 的宽度与 viewport 的宽度相匹配,则返回 true。

int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) 显示逻辑行或列的组件应根据方向的值计算滚动增量,此滚动增量将完全显示一个新行或新列。

int getTabSize() 获取用于扩展选项卡的字符数。

String getUIClassID() 返回 UI 的类 ID。

boolean getWrapStyleWord() 获取换行方式(如果文本区要换行)。

void insert(String str, int pos) 将指定文本插入指定位置。

protected String paramString() 返回此 JTextArea 的字符串表示形式。

void replaceRange(String str, int start, int end) 用给定的新文本替换从指示的起始位置到结尾位置的文本。

void setColumns(int columns) 设置此 TextArea 中的列数。

void setFont(Font f) 设置当前字体。

void setLineWrap(boolean wrap) 设置文本区的换行策略。

void setRows(int rows) 设置此 TextArea 的行数。

void setTabSize(int size) 设置选项卡要扩大到的字符数。

void setWrapStyleWord(boolean word) 设置换行方式(如果文本区要换行)。

VB,最底下的Timer是自己做的倒计时。网上找了一个限制鼠标代码加到里面生成exe后限制鼠标失效。

间隔太大了吧,可以设成每毫秒一次,然后改成 Private Sub Timer1_Timer() Static i Cls i = i + 1 Form1.CurrentX = (Form1.ScaleWidth - TextWidth(i1000)) / 35 Form1.CurrentY = (Form1.ScaleHeight - TextWidth(i1000)) / 1.15 Print "鼠标已锁定,等待系统运行稳定,等待" & 51 - i1000 & "秒..." If i = 50*1000 Then Unload Form1 MsgBox "启动完成,开始计费,祝您愉快!" End End If End Sub

MFC做表格的控件

Microsoft flexGrid control控件比较常见。

【实现步骤】 1. 当鼠标点击表格控件的某一格时,首先判断该列的属性,是直接编辑呢,还是用下拉列表进行选择。

2. 显示隐藏的文本控件或者下拉列表控件,显示的位置和大小与选中格的位置大小完全相同,这样可以覆盖选中格 3. 将选中格的内容填到文本控件或者下拉列表控件中 4. 修改完毕后,将新的内容填到选中格中,同时隐藏文本控件或者下拉列表控件。

【主要程序段及说明】 变量定义: CComboBox m_ChangeCombo;--下拉列表控件,初始时不可见 CEdit m_Change;---------------文本控件,初始时不可见 CSring m_sChange;----------------与文本控件关联的字符串 CMSFlexGrid m_FlexGrid;-----表格控件 程序段: 表格点击事件:选中某一格后,就要显示相应的文本控件或者列表控件 void CChartInfoEditDlg::OnClickMsflexgrid() { //点击无效区,返回 long lRow = m_FlexGrid.GetRowSel();//获取点击的行号 long lCol = m_FlexGrid.GetColSel(); //获取点击的列号 if(lRow>m_SAttrInfo.attrNum) //如果点击区超过最大行号,则点击是无效的 return; if(lRow == 0) //如果点击标题行,也无效 return; // CRect rect; m_FlexGrid.GetWindowRect(rect); //获取表格控件的窗口矩形 ScreenToClient(rect); //转换为客户区矩形 // MSFlexGrid 控件的函数的长度单位是"缇(twips)", //需要将其转化为像素,1440 缇 = 1 英寸 CDC* pDC =GetDC(); //计算象素点和缇的转换比例 int nTwipsPerDotX = 1440 / pDC->GetDeviceCaps(LOGPIXELSX) ; int nTwipsPerDotY = 1440 / pDC->GetDeviceCaps(LOGPIXELSY) ; //计算选中格的左上角的坐标(象素为单位) long y = m_FlexGrid.GetRowPos(lRow)/nTwipsPerDotY; long x = m_FlexGrid.GetColPos(lCol)/nTwipsPerDotX; //计算选中格的尺寸(象素为单位)。

加1是实际调试中,发现加1后效果更好 long width = m_FlexGrid.GetColWidth(lCol)/nTwipsPerDotX+1; long height = m_FlexGrid.GetRowHeight(lRow)/nTwipsPerDotY+1; //形成选中个所在的矩形区域 CRect rc(x,y,x+width,y+height); //转换成相对对话框的坐标 rc.OffsetRect(rect.left+1,+1); //清空下拉列表的内容 m_ChangeCombo.ResetContent( ); //以下省略哪一列用文本控件,哪一列用下拉列表控件的判断。

如果是用下拉列表控件,则会先向下拉列表控件中增加数据,否则为空 ………………………………. ………………………………. //获取选中格的文本信息 CString strValue = m_FlexGrid.GetTextMatrix(lRow,lCol); int num = m_ChangeCombo.GetCount(); //如果下拉列表控件中有数据,则表示使用下拉列表控件来进行数据选择 if(num!=0) { m_ChangeCombo.ShowWindow(SW_SHOW);//显示控件 m_ChangeCombo.MoveWindow(rc); //移动到选中格的位置,覆盖 m_ChangeCombo.SelectString(-1,strValue); //内容全选。

方便直接修改 m_ChangeCombo.SetFocus(); //获取焦点 UpdateData(false); return; } // m_Change.ShowWindow(SW_SHOW); //显示控件 m_Change.SetWindowText(strValue); //显示文本 m_Change.SetFocus(); //获取焦点 m_Change.SetSel(0,-1); //全选 m_Change.MoveWindow(rc); //移动到选中格的位置,覆盖 } 文本编辑完毕后,回车即将新的文本信息填到选中格中 void CChartInfoEditDlg::OnKillfocusEditChange() { UpdateData(true); m_FlexGrid.SetText(m_SChange);//设置文本信息 m_Change.ShowWindow(SW_HIDE); //隐藏文本控件 UpdateData(false); } 下拉列表编辑完毕后,将新的新息填到选中格中 void CChartInfoEditDlg::bo() { UpdateData(true); CString str; m_ChangeCombo.GetWindowText(str); m_FlexGrid.SetText(str); m_ChangeCombo.ShowWindow(SW_HIDE); UpdateData(false); } 【总结】这是一个比较简单的程序。

如果表格中列较多,属性各有不同,也许大家可以试着用更加复杂的控件来编辑信息。

也可以同时做多个文本控件和下拉列表控件,以对应不同列的不同信息要求(比如有的格信息可能又不同的格式要求,那么可以预先做好各种不同风格的控件与之对应)。

【笔者注】虽然当前有许多这样的例子。

但笔者做这个程序时,并没有借鉴现有的东西。

因此可能在方法上不见得最简单。

但确实效果不错,对付一般情况是没有问题的。

大家如果对此有疑问或新思想,可以和笔者讨论。

联系信箱:happyparrot@

野草云99元/月 ,香港独立服务器 E3-1230v2 16G 30M 299元/月 香港云服务器 4核 8G

野草云月末准备了一些促销,主推独立服务器,也有部分云服务器,价格比较有性价比,佣金是10%循环,如果有时间请帮我们推推,感谢!公司名:LucidaCloud Limited官方网站:https://www.yecaoyun.com/香港独立服务器:CPU型号内存硬盘带宽价格购买地址E3-1230v216G240GB SSD或1TB 企盘30M299元/月点击购买E5-265016G240GB SS...

搬瓦工:新增荷兰机房 EUNL_9 测评,联通 AS10099/AS9929 高端优化路线/速度 延迟 路由 丢包测试

搬瓦工最近上线了一个新的荷兰机房,荷兰 EUNL_9 机房,这个 9 的编号感觉也挺随性的,之前的荷兰机房编号是 EUNL_3。这次荷兰新机房 EUNL_9 采用联通 AS9929 高端路线,三网都接入了 AS9929,对于联通用户来说是个好消息,又多了一个选择。对于其他用户可能还是 CN2 GIA 机房更合适一些。其实对于联通用户,这个荷兰机房也是比较远的,相比之下日本软银 JPOS_1 机房可...

ZJI-全场八折优惠,香港服务器 600元起,还有日本/美国/韩国服务器

月付/年付优惠码:zji  下物理服务器/VDS/虚拟主机空间订单八折终身优惠(长期有效)一、ZJI官网点击直达ZJI官方网站二、特惠香港日本服务器香港大埔:http://hkdb.speedtest.zji.net/香港葵湾:http://hkkw.speedtest.zji.net/日本大阪:http://jpsk.speedtest.zji.net/日本大阪一型 ...

offsetrect为你推荐
ov单片机中psw中的ov的用法安装程序配置服务器失败sql server 2000 安装程序配置服务器失败真正免费的网络电话谁有真正免费的网络电话??天天酷跑刷积分教程葫芦侠3楼几十万的积分怎么刷天天酷跑积分怎么刷百度手写百度为什么没有了在线手写输入法ps抠图技巧ps抠图多种技巧,越详细越好,急~~~~~~~不兼容vivo手机和软件不兼容怎么办?申请证书手机申请证书ios7固件下载iOS的固件有正版盗版之分吗?我看到了蜂威网有iOS7的固件想下载试用一下,那里是测试版是正版吗人人逛街为什么女人都喜欢逛街?谢谢了,大神帮忙啊
免备案虚拟主机 域名服务器的作用 域名备案中心 火山主机 新加坡主机 godaddy域名证书 工信部icp备案号 刀片式服务器 91vps 免费全能主机 河南移动m值兑换 paypal注册教程 512mb linode支付宝 下载速度测试 全能空间 阿里云手机官网 国外免费云空间 winserver2008r2 机柜尺寸 更多