c# mdi 通过c webbrowserr 加载网页子窗口,页面存在webusercontrol封装按钮,调用hide,show网页控件不能用

c# mdi 通过webbrowser 加载网页子窗口,页面存在webusercontrol封装按钮,调用hide,show网页控件不能用_百度知道
c# mdi 通过webbrowser 加载网页子窗口,页面存在webusercontrol封装按钮,调用hide,show网页控件不能用
c# mdi 通过webbrowser 加载网页子窗口页面,页面存在webusercontrol封装的按钮,此时调用hide,再show出窗口窗口中webbrowser中网页的webusercontrol不能点击
if (control is ListBox)
ListBox lst = control as ListB
if (lst .Show(ex!= null)
lst.Controls)
if (control is TextBox)
TextBox txt=control as TextBox .Clear();
catch (Exception ex)
MessageBox.Text =&quot这个问题有点水平.Items,但也不难!=null)
&quot。我现在假设你自定义面板上只有Textbox和listbox两种控件(其他类似做法)
private void button1_Click(
if(txt, EventArgs e)
foreach (Con.Message)
#天天爱答题#控件是网页上的,不在winform里面,请教一下n
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C#常用控件及其常用属性的介绍 - linuxstuding - ITeye技术网站
C#控件属性:
1、常用属性
(1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。
(2) WindowState属性: 用来获取或设置窗体的窗口状态。 取值有三种: Normal (窗体正常显示)、 Minimized
(窗体以最小化形式显示)和 Maximized(窗体以最大化形式显示)。
(3)StartPosition属性:用来获取或设置运行时窗体的起始位置。
(4)Text属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。
(5)Width属性:用来获取或设置窗体的宽度。
(6)Height属性:用来获取或设置窗体的高度。
(7)Left属性:用来获取或设置窗体的左边缘的x坐标(以像素为单位)。
(8)Top属性:用来获取或设置窗体的上边缘的y坐标(以像素为单位)。
(9)ControlBox属性:用来获取或设置一个值,该值指示在该窗体的标题栏中是否显示控制框。值为true
时将显示控制框,值为false时不显示控制框。
(10)MaximizeBox属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最大化按钮。值
为 true时显示最大化按钮,值为false时不显示最大化按钮。
(11)MinimizeBox 属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最小化按钮。值
为 true时显示最小化按钮,值为false时不显示最小化按钮。
(12)AcceptButton 属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按 Enter 键时就相
当于单击了窗体上的该按钮。
(13)CancelButton 属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按 Esc 键时就相当
于单击了窗体上的该按钮。
(14)Modal 属性:该属性用来设置窗体是否为有模式显示窗体。如果有模式地显示该窗体,该属性值为
true;否则为 false。当有模式地显示窗体时,只能对模式窗体上的对象进行输入。必须隐藏或关闭模式窗
体(通常是响应某个用户操作),然后才能对另一窗体进行输入。有模式显示的窗体通常用做应用程序中
的对话框。
(15)ActiveControl属性:用来获取或设置容器控件中的活动控件。窗体也是一种容器控件。
(16)ActiveMdiChild属性:用来获取多文档界面(MDI)的当前活动子窗口。
(17)AutoScroll 属性:用来获取或设置一个值,该值指示窗体是否实现自动滚动。如果此属性值设置为
true,则当任何控件位于窗体工作区之外时,会在该窗体上显示滚动条。另外,当自动滚动打开时,窗体
的工作区自动滚动,以使具有输入焦点的控件可见。
(18)BackColor属性:用来获取或设置窗体的背景色。
(19)BackgroundImage属性:用来获取或设置窗体的背景图像。
(20)Enabled 属性:用来获取或设置一个值,该值指示控件是否可以对用户交互作出响应。如果控件可
以对用户交互作出响应,则为 true;否则为false。默认值为true。
(21)Font属性:用来获取或设置控件显示的文本的字体。
(22)ForeColor属性:用来获取或设置控件的前景色。
(23)IsMdiChild属性:获取一个值,该值指示该窗体是否为多文档界面(MDI)子窗体。值为 true时,
是子窗体,值为false时,不是子窗体。
(24)IsMdiContainer 属性:获取或设置一个值,该值指示窗体是否为多文档界面(MDI)中的子窗体的
容器。值为true时,是子窗体的容器,值为false时,不是子窗体的容器。
(25)KeyPreview属性:用来获取或设置一个值,该值指示在将按键事件传递到具有焦点的控件前,窗体
是否将接收该事件。值为true时,窗体将接收按键事件,值为false时,窗体不接收按键事件。
(26)MdiChildren属性:数组属性。数组中的每个元素表示以此窗体作为父级的多文档界面(MDI)子窗
(27)MdiParent属性:用来获取或设置此窗体的当前多文档界面(MDI)父窗体。
(28)ShowInTaskbar属性:用来获取或设置一个值,该值指示是否在Windows任务栏中显示窗体。
(29)Visible属性:用于获取或设置一个值,该值指示是否显示该窗体或控件。值为true
时显示窗体或控件,为 false时不显示。
(30)Capture属性:如果该属性值为true,则鼠标就会被限定只由此控件响应,不管鼠标是否在此控件的
2、常用方法
下面介绍一些窗体的最常用方法。
(1)Show方法:该方法的作用是让窗体显示出来,其调用格式为:
窗体名.Show();
其中窗体名是要显示的窗体名称。
(2)Hide方法:该方法的作用是把窗体隐藏出来,其调用格式为:
窗体名.Hide();
其中窗体名是要隐藏的窗体名称。
(3)Refresh方法:该方法的作用是刷新并重画窗体,其调用格式为:
窗体名.Refresh();
其中窗体名是要刷新的窗体名称。
(4)Activate方法:该方法的作用是激活窗体并给予它焦点。其调用格式为:
窗体名.Activate();
其中窗体名是要激活的窗体名称。
(5)Close方法:该方法的作用是关闭窗体。其调用格式为:
窗体名.Close();
其中窗体名是要关闭的窗体名称。
(6)ShowDialog方法:该方法的作用是将窗体显示为模式对话框。其调用格式为:
窗体名.ShowDialog();
3.常用事件
(1)Load事件:该事件在窗体加载到内存时发生,即在第一次显示窗体前发生。
(2)Activated事件:该事件在窗体激活时发生。
(3)Deactivate事件:该事件在窗体失去焦点成为不活动窗体时发生。
(4)Resize事件:该事件在改变窗体大小时发生。
(5)Paint事件:该事件在重绘窗体时发生。
(6)Click事件:该事件在用户单击窗体时发生。
(7)DoubleClick事件:该事件在用户双击窗体时发生。
(8)Closed事件:该事件在关闭窗体时发生。
文本框类控件
2、Label 控件
1、常用属性:
(1)Text属性:用来设置或返回标签控件中显示的文本信息。
(2)AutoSize 属性:用来获取或设置一个值,该值指示是否自动调整控件的大小以完整显示其内容。取
值为 true时,控件将自动调整到刚好能容纳文本时的大小,取值为false时,控件的大小为设计时的大小。
默认值为false。
(3)Anchor 属性:用来确定此控件与其容器控件的固定关系的。所谓容器控件指的是这样一种情况:往
往在控件之中还有一个控件,例如最典型的就是窗体控件中会包含很多的控件,像标签控件、文本框等。
这时称包含控件的控件为容器控件或父控件,而父控件称为子控件。这时将遇到一个问题,即子控件与父
控件的位置关系问题,即当父控件的位置、大小变化时,子控件按照
什么样的原则改变其位置、大小。Anchor属性就规定了这个原则。
对于 Anchor 属性,可以设定 Top、Bottom、Right、Left 中的任意几
种,设置的方法是在属性窗口中单击Anchor属性右边的箭头,将会
出现如图 9-6 的窗口,通过它可设置 Anchor 属性值。图 9-6 中选中
变黑的方位即为设定的方位控制,即图中所示的为 Left、Right、
Bottom。此时,如果父窗口变化,子窗口将保证其左边缘与容器左边
的距离、上边缘与容器上边的距离、底边与容器底边的距离等不变,
效果如图9-7 所示。
可见随着窗体的大小变
化, Label控件也会随着
变 。 而 不 变 的 则 是
Archor中所规定的边
缘与相应的父控件边缘
(4)BackColor属性:
用来获取或设置控件的背景色。当该属性值设置为 Color.Transparent 时,标签将透明显示,即背景色不再
显示出来。
(5)BorderStyle 属性:用来设置或返回边框。有三种选择:
BorderStyle.None 为无边框(默认),BorderStyle.FixedSingle 为固
定单边框,BorderStyle.Fixed3D 为三维边框。
(6)TabIndex属性:用来设置或返回对象的Tab键顺序。
(7)Enabled 属性:用来设置或返回控件的状态。值为 true 时允
许使用控件,值为 false 时禁止使用控件,此时标签呈暗淡色,一
般在代码中设置。图9-8 边框效果图
另外,标签还具有Visible、ForeColor、Font等属性,具体含义请参考窗体的相应属性。
3、TextBox 控件
1、主要属性:
(1)Text属性:Text属性是文本框最重要的属性,因为要显示的文本就包含在Text属性中。默认情况下,
最多可在一个文本框中输入2048个字符。如果将MultiLine属性设置为true,则最多可输入32KB 的文本。
Text属性可以在设计时使用【属性】窗口设置,也可以在运行时用代码设置或者通过用户输入来设置。可
以在运行时通过读取Text属性来获得文本框的当前内容。
(2)MaxLength 属性:用来设置文本框允许输入字符的最大长度,该属性值为 0 时,不限制输入的字符
(3)MultiLine 属性:用来设置文本框中的文本是否可以输入多行并以多行显示。值为 true 时,允许多行
显示。值为false时不允许多行显示,一旦文本超过文本框宽度时,超过部分不显示。
(4)HideSelection属性:用来决定当焦点离开文本框后,选中的文本是否还以选中的方式显示,值为true,
则不以选中的方式显示,值为 false将依旧以选中的方式显示。
(5)ReadOnly属性:用来获取或设置一个值,该值指示文本框中的文本是否为只读。值为 true时为只读,
值为 false时可读可写。
(6)PasswordChar 属性:是一个字符串类型,允许设置一个字符,运行程序时,将输入到 Text 的内容全
部显示为该属性值,从而起到保密作用,通常用来输入口令或密码。
(7) ScrollBars属性: 用来设置滚动条模式, 有四种选择: ScrollBars.None (无滚动条), ScrollBars.Horizontal
(水平滚动条),ScrollBars.Vertical(垂直滚动条),ScrollBars.Both(水平和垂直滚动条)。
注意:只有当MultiLine属性为true时,该属性值才有效。在WordWrap属性值为true时,
水平滚动条将不起作用
(8)SelectionLength属性:用来获取或设置文本框中选定的字符数。只能在代码中使用,值为0 时,表示
未选中任何字符。
(9)SelectionStart属性:用来获取或设置文本框中选定的文本起始点。只能在代码中使用,第一个字符的
位置为0,第二个字符的位置为1,依此类推。
(10)SelectedText 属性:用来获取或设置一个字符串,该字符串指示控件中当前选定的文本。只能在代
码中使用。
(11)Lines:该属性是一个数组属性,用来获取或设置文本框控件中的文本行。即文本框中的每一行存放
在 Lines数组的一个元素中。
(12)Modified:用来获取或设置一个值,该值指示自创建文本框控件或上次设置该控件的内容后,用户
是否修改了该控件的内容。值为true表示修改过,值为 false表示没有修改过。
(13)TextLength属性:用来获取控件中文本的长度。
(14)WordWrap:用来指示多行文本框控件在输入的字符超过一行宽度时是否自动换行到下一行的开始,
值为 true,表示自动换到下一行的开始,值为false表示不自动换到下一行的开始。
2、常用方法:
(1)AppendText方法:把一个字符串添加到文件框中文本的后面,调用的一般格式如下:
文本框对象.AppendText(str)
参数 str是要添加的字符串。
(2)Clear方法:从文本框控件中清除所有文本。调用的一般格式如下:
文本框对象.Clear()该方法无参数。
(3)Focus方法:是为文本框设置焦点。如果焦点设置成功,值为 true,否则为false。调用的一般格式如
文本框对象.Focus()该方法无参数。
(4)Copy方法:将文本框中的当前选定内容复制到剪贴板上。调用的一般格式如下:
文本框对象.Copy()该方法无参数。
(5)Cut方法:将文本框中的当前选定内容移动到剪贴板上。调用的一般格式如下:
文本框对象.Cut()该方法无参数。
(6)Paste方法:用剪贴板的内容替换文本框中的当前选定内容。调用的一般格式如下:
文本框对象.Paste()该方法无参数。
(7)Undo 方法:撤销文本框中的上一个编辑操作。调用的一般格式如下:
文本框对象.Undo()该方法无参数。
(8)ClearUndo方法:从该文本框的撤销缓冲区中清除关于最近操作的信息,根据应用
程序的状态,可以使用此方法防止重复执行撤销操作。调用的一般格式如下:
文本框对象.ClearUndo()该方法无参数。
(9)Select方法:用来在文本框中设置选定文本。调用的一般格式如下:
文本框对象.Select(start,length)
该方法有两个参数,第一个参数start用来设定文本框中当前选定文本的第一个字符的位
置,第二个参数length用来设定要选择的字符数。
(10)SelectAll方法:用来选定文本框中的所有文本。调用的一般格式如下:
文本框对象.SelectAll()该方法无参数。
3、常用事件:
(1)GotFocus事件:该事件在文本框接收焦点时发生。
(2)LostFocus事件:该事件在文本框失去焦点时发生。
(3)TextChanged事件:该事件在Text属性值更改时发生。无论是通过编程修改还是用户交互更改文本框
的 Text属性值,均会引发此事件。
4、RichTextBox控件
RichTextBox是一种既可以输入文本、 又可以编辑文本的文字处理控件, 与TextBox控件相比, RichTextBox
控件的文字处理功能更加丰富, 不仅可以设定文字的颜色、 字体, 还具有字符串检索功能。 另外, RichTextBox
控件还可以打开、编辑和存储.rtf格式文件、ASCII文本格式文件及Unicode编码格式的文件。
1、常用属性
上面介绍的 TextBox 控件所具有的属性,RichTextBox 控件基本上都具有,除此之外,该控件还具有一些
其他属性。
(1)RightMargin属性:用来设置或获取右侧空白的大小,单位是像素。通过该属性可以设置右侧空白,
如希望右侧空白为50像素,可使用如下语句:
RichTextBox1.RightMargin=RichTextBox1.Width-50;
(2)Rtf属性:用来获取或设置RichTextBox控件中的文本,包括所有RTF格式代码。可以使用此属性将
RTF格式文本放到控件中以进行显示,或提取控件中的RTF格式文本。此属性通常用于在RichTextBox控
件和其他RTF源(如 MicrosoftWord或 Windows写字板)之间交换信息。
(3)SelectedRtf 属性:用来获取或设置控件中当前选定的 RTF 格式的格式文本。此属性使用户得以获取
控件中的选定文本,包括RTF格式代码。如果当前未选定任何文本,给该属性赋值将把所赋的文本插入到
插入点处。如果选定了文本,则给该属性所赋的文本值将替换掉选定文本。
(4)SelectionColor属性:用来获取或设置当前选定文本或插入点处的文本颜色。
(5)SelectionFont属性:用来获取或设置当前选定文本或插入点处的字体。
2、常用方法
前面介绍的 TextBox 控件所具有的方法,RichTextBox 控件基本上都具有,除此之外,该控件还具有一些
其他方法。
(1)Redo方法:用来重做上次被撤销的操作。调用的一般格式如下:
RichTextBox对象.Redo()
该方法无参数。
(2)Find方法:用来从RichTextBox控件中查找指定的字符串。经常使用的调用格式如下:
RichTextBox对象.Find(str)
[功能]:在指定的“RichTextBox”控件中查找文本,并返回搜索文本的第一个字符在控件内的位置。如果
未找到搜索字符串或者str参数指定的搜索字符串为空,则返回值为1。
RichTextBox对象.Find(str,RichTextBoxFinds)
[功能]:在“RichTextBox 对象”指定的文本框中搜索 str 参数中指定的文本,并返回文本的第一个字符在
控件内的位置。如果返回负值,则未找到所搜索的文本字符串。还可以使用此方法搜索特定格式的文本。
参数RichTextBoxFinds指定如何在控件中执行文本搜索,其取值及其含义如表9-4 所示。
RichTextBox对象.Find(str,start,RichTextBoxFinds)
[功能]:这里Find方法与前面的格式2 基本类似,不同的只是通过设置控件文本内的搜索起始位置来缩小
文本搜索范围,start参数表示开始搜索的位置。此功能使用户得以避开可能已搜索过的文本或已经知道不
包含要搜索的特定文本的文本。如果在options参数中指定了RichTextBoxFinds.Reverse值,则 start参数的
值将指示反向搜索结束的位置,因为搜索是从文档底部开始的。
(3)SaveFile方法:用来把RichTextBox中的信息保存到指定的文件中,调用格式有以下三种。
RichTextBox对象名.SaveFile(文件名);
[功能]:将 RichTextBox控件中的内容保存为RTF格式文件中。
RichTextBox对象名.SaveFile(文件名,文件类型);
[功能]:将 RichTextBox控件中的内容保存为“文件类型”指定的格式文件中。
RichTextBox对象名.SaveFile(数据流,数据流类型);
[功能]:将 RichTextBox控件中的内容保存为“数据流类型”指定的数据流类型文件中。
其中,文件类型或数据流类型的取值及含义如表9-5所示。
(4)LoadFile方法:使用LoadFile方法可以将文本文件、RTF文件装入RichTextBox控件。主要的调用格
式有以下三种。
RichTextBox对象名.LoadFile(文件名);
[功能]:将RTF格式文件或标准ASCII文本文件加载到RichTextBox控件中。
RichTextBox对象名.LoadFile(数据流,数据流类型);
[功能]:将现有数据流的内容加载到RichTextBox控件中。
RichTextBox对象名.LoadFile(文件名,文件类型);
[功能]:将特定类型的文件加载到RichTextBox控件中。
注意:文件类型和数据流格式见表9-5。
5、NumericUpDown 控件
【Windows 窗体】控件组中的 NumericUpDown 控件看起来像是一个文本框与一对用户可单击以调整值的
箭头的组合。可以通过单击向上和向下按钮、按向上和向下箭头键来增大和减小数字,也可以直接输入数
字。单击向上箭头键时,值向最大值方向增加;单击向下箭头键时,值
向最小值方向减少。该控件在工具箱中的图标为 。
该控件的样式如图9-13所示。
1、常用属性:
(1)DecimalPlaces:获取或设置该控件中显示的小数位数。
(2)Hexadecimal:获取或设置一个值,该值指示该控件是否以十六进制格式显示所包
(3)Increment:获取或设置单击向上或向下按钮时,该控件递增或递减的值。
(4)Maximum:获取或设置该控件的最大值。
(5)Minimum:获取或设置该控件的最小值。
(6)Value:获取或设置该控件的当前值。
与 TextBox控件一样,NumericUpDown控件的常用事件有:ValueChanged、GotFocus、LostFocus等。
按钮类控件
C#控件大全:
DataGridView 控件DataGridView 控件提供用来显示数据的可自定义表。使用 DataGridView 类,可以自定义单元格、行、列和边框。
DataGridView 控件提供 DataGrid 控件所不具备的许多基本和高级功能。有关更多信息,请参见 Windows 窗体 DataGridView 控件和
DataGrid 控件之间的区别
DefaultCellStyle、ColumnHeadersDefaultCellStyle、CellBorderStyle 和 GridColor
数据绑定和定位
BindingSource 组件
通过提供当前项管理、更改通知和其他服务,来简化将窗体上的控件绑定到数据的过程。
BindingNavigator 控件
提供工具栏式的界面来定位和操作窗体上的数据。
TextBox 控件
显示设计时输入的文本,它可由用户在运行时编辑或以编程方式更改。
RichTextBox 控件
使文本能够以纯文本或 RTF 格式显示。
MaskedTextBox 控件
约束用户输入的格式
信息显示(只读)
Label 控件
显示用户无法直接编辑的文本。
LinkLabel 控件
将文本显示为 Web 样式的链接,并在用户单击该特殊文本时触发事件。该文本通常是到另一个窗口或网站的链接。
StatusStrip 控件
通常在父窗体的底部使用有框架的区域显示有关应用程序的当前状态的信息。
ProgressBar 控件
向用户显示操作的当前进度。
WebBrowser 控件
使用户可以在窗体内导航网页。
从列表中选择
CheckedListBox 控件
显示一个可滚动的项列表,每项旁边都有一个复选框。
ComboBox 控件
显示一个下拉式项列表。
DomainUpDown 控件
显示用户可用向上和向下按钮滚动的文本项列表。
ListBox 控件
显示一个文本项和图形项(图标)列表。
ListView 控件
在四个不同视图之一中显示项。这些视图包括纯文本视图、带有小图标的文本视图、带有大图标的文本视图和详细信息视图。
NumericUpDown 控件
显示用户可用向上和向下按钮滚动的数字列表。
TreeView 控件
显示一个节点对象的分层集合,这些节点对象由带有可选复选框或图标的文本组成。
PictureBox 控件
在一个框架中显示图形文件(如位图和图标)。
ImageList控件
充当图像储存库。ImageList 控件和及其包含的图像可以在不同的应用程序中重用。
CheckBox 控件
显示一个复选框和一个文本标签。通常用来设置选项。
CheckedListBox 控件
显示一个可滚动的项列表,每项旁边都有一个复选框。
RadioButton 控件
显示一个可打开或关闭的按钮。
TrackBar 控件
允许用户通过沿标尺移动“滚动块”来设置标尺上的值。
数据的设置
DateTimePicker 控件
显示一个图形日历以允许用户选择日期或时间。
MonthCalendar 控件
显示一个图形日历以允许用户选择日期范围。
ColorDialog 控件
显示允许用户设置界面元素的颜色的颜色选择器对话框。
FontDialog 控件
显示允许用户设置字体及其属性的对话框。
OpenFileDialog 控件
显示允许用户定位文件和选择文件的对话框。
PrintDialog 控件
显示允许用户选择打印机并设置其属性的对话框。
PrintPreviewDialog件
显示一个对话框,该对话框显示 PrintDocument 组件在打印出来后的外观。
FolderBrowserDialog 控件
显示用来浏览、创建以及最终选择文件夹的对话框
SaveFileDialog 控件
显示允许用户保存文件的对话框。
MenuStrip 控件
创建自定义菜单
MenuStrip 的设计目的是为了取代 MainMenu 控件。
ContextMenuStrip 控件
创建自定义上下文菜单。
ContextMenuStrip 的设计目的是为了取代 ContextMenu 控件。
Button 控件
启动、停止或中断进程。
LinkLabel 控件
将文本显示为 Web 样式的链接,并在用户单击该特殊文本时触发事件。该文本通常是到另一个窗口或网站的链接。
NotifyIcon 控件
在表示正在后台运行的应用程序的任务栏的状态通知区域中显示一个图标。
ToolStrip 控件
创建工具栏,这些工具栏可以具有与 Microsoft Windows XP、Microsoft Office 或 Microsoft Internet Explorer 类似的外观,也可以具
有自定义外观,可以有主题,也可以没有主题,并支持溢出和运行时项重新排序。
ToolStrip 控件的设计目的是为了取代 ToolBar 控件。
HelpProvider 组件
为控件提供弹出式帮助或联机帮助。
ToolTip 组件
当用户将指针停留在控件上时,提供一个弹出式窗口来显示该控件的用途的简短说明。
将其他控件分组
Panel 控件
将一组控件分组到未标记、可滚动的框架中。
GroupBox 控件
将一组控件(如单选按钮 (RadioButton))分组到带标记、不可滚动的框架中。
TabControl 控件
提供一个选项卡式页面以有效地组织和访问已分组对象。
SplitContainer 控件
提供用可移动拆分条分隔的两个面板。
SplitContainer 控件的设计目的是为了取代 Splitter 控件。
TableLayoutPanel 控件
表示一个面板,它可以在一个由行和列组成的网格中对其内容进行动态布局。
FlowLayoutPanel 控件
表示一个沿水平或垂直方向动态排放其内容的面板。
SoundPlayer 控件
播放 .wav 格式的声音文件。加载声音和播放声音可以异步进行。
linuxstuding
浏览: 198589 次
学习了,顶一个16087人阅读
CSDN 讨论总结系列:Jiangsheng的CSDN Digest (Dec 2005)() Jiangsheng的CSDN Digest (Oct 2005)() Win32 & .Net Q&A 200509 () Win32 & .Net Q&A () VC/MFC Q&A 200407 ()在default桌面中如何获取Winlogon桌面位图(VC/MFC 进程/线程/DLL )为何我的服务程序只能获取default的桌面位图,但不能获取Winlogon桌面的?怎么才能做到象DameWare Mini Remote Control那样既可获取default的桌面位图,也支持Winlogon下的位图?使用HDESK OpenDesktop(LPTSTR lpszDesktop, // name of the desktop to openDWORD dwFlags, // flags to control interaction with other applicationsBOOL fInherit, // specifies whether returned handle is inheritableDWORD dwDesiredAccess // specifies access of returned handle);和BOOL SetThreadDesktop(HDESK hDesktop // handle to the desktop to assign to this thread);&讲下window station 和desktop。它们主要是用于服务程序,一般的应用程序不必使用它们。它们可以用来对服务进行保护。运行在不同的window station 或不同的desktop下的应用程序,不能互相发送消息、挂钩、使用同一个clipboard等等。主要是出于安全的目的。服务程序一般使用的是LocalSystem帐户,拥有自己的window station,和Default桌面,这个window station是不能于用户交互的,也就是说,你不能在上面显示窗口,它也不接受用户的鼠标、键盘等输入。使用用户帐户登录以后,看到的桌面,是WinSta0(window station)下的Default(desktop). WinSta0下有3个桌面:WinLogon :以Logon对话框的形式出现.当用户登录以后,WinLogon.exe切换到Default desktop.Default :这是Explorer.exe和所有用户程序窗口出现的地方,也就是我们通常使用windows看见的地方.应用程序就运行在这个桌面上Screen saver :系统空闲的时候,运行屏保的桌面.当在&计算机管理&中选择一个服务,修改属性,选择&登录&标签页的&允许服务与桌面交互&,那么该服务就使用的是WinSta0(window station)下的Default(desktop). 也就可以与服务进行交互操作了。这时,能获取default的桌面位图,因为线程的桌面就是WinSta0下的Default。要想同时获得Winlogon桌面位图,应该先把线程的桌面设置成Winlogon。OpenInputDesktop返回就是当前活动桌面基于对话框的程序的时候,是因为你的权限不够,所以在winlogon下会返回空。利用返回值为空的方法不适合服务。使用的是系统权限(运行在服务下),当程序切换到winlogon前,先用OpenInputDesktop得到当前桌面,再用GetUserObjectInformation就可以得到当前的桌面的名字,是default。切换后,再用同样的方法得到的是winlogon。再切换回来,得到的是default。说个小插曲,第一次做的时候,只切换到winlogon,程序没有自动切换回default。只好重新启动。连接时报某个接口ID未定义的问题 (VC/MFC ATL/ActiveX/COM)Linking...MainFrm.obj : error LNK2001: unresolved external symbol _IID_IExtractImageDebug/DVBTools.exe : fatal error LNK1120: 1 unresolved externalsError executing link.exe.但我的头文件定义了,也包含了下面的定义//BB2E617C--9A0B-00C04FC2D6C1DEFINE_GUID(IID_IExtractImage, 0xBB2E617C, 0xd1, 0x9A, 0x0B, 0x00, 0xC0, 0x4F, 0xC2, 0xD6, 0xC1);在没有包含Initguid.h的地方,DEFINE_GUID宏创建外部引用来使用GUID值,在包含Initguid.h的地方,DEFINE_GUID重定义DEFINE_GUID宏以产生GUID的定义。如是没有在任何地方添加Initguid.h,会得到一个链接错误:&unresolved external symbol.& ,如果同样的GUID包含Initguid.h两次,会得到编译错误& multiple initialization.&要解决这些问题,请确认Initguid.h只包含一次。同样的,不要包含Initguid.h到预编译头文件中去,因为预编译头文件会被每个源文件包含。 我怎么样将自己定义VIEW,比如我自己做了一个可以改变单行颜色的clistctrl我想在view里面使用此功能(VC/MFC 界面)我要做一个列表视Listview,但系统默认的CListView类没有单行改变颜色的功能,只能自己做一个新视,新视图从CView继承。请问我接下来怎么用自定义的Clistctrl来填充视口啊?如果你的CListCtrl扩展类没有增加成员变量或者虚函数(这似乎是一种缚手缚脚的扩展),那么你可以直接把任何窗口类类型为SysListView32的CWnd对象指针直接转化为你的CListCtrl扩展类指针使用。如果你的CListCtrl扩展类在CListCtrl的基础上增加了成员变量或者虚函数,那么推荐用基于CFormView(或者更麻烦一些,CCtrlView)的类来替代基于CListView的实现:在FormView的对话框上放一个列表控件,在FormView大小变化时移动列表控件以充满视图。如果你希望让视图类而不是视图中的控件来处理和响应消息,你需要捕捉控件收到的用户输入消息并通过发送WM_NOTIFY通知转发到视图,以及捕捉视图收到的控制消息并转发到控件。使用这种方法也可以自行封装基于CCtrlView的自定义控件视图类。如果你的CListCtrl扩展类不依赖于控件的状态&&也就是说,由调用者手动初始化而不是自行处理创建消息,那么可以声明一个CListCtrl扩展类对象,之后调用CWnd::Attatch连接到CListView派生类对象来接管窗口过程。其它的通用控件扩展类也可以使用上述方法移植到CCtrlView派生类。其他的方法包含:把Ctrl和View中重复的功能作成模板(可以参考CHTMLEditCtrl/CHTMLEditView的实现)单独编写Ctrl和View,把Ctrl和View中重复的代码作成辅助函数供窗口的消息相应函数调用。VC 2003.net的Crt代码里头的memcmp函数 (C/C++ C++ 语言)其中一段是:test eax,1jz short main_loopmov cl,[esi]cmp cl,[edi]jne short not_equaladd esi,1add edi,1sub eax,1 eax is already 0main_loop:mov cl,[esi]mov dl,[edi]cmp cl,dljne short not_equalmov cl,[esi+1]mov dl,[edi+1]cmp cl,dljne short not_equaladd edi,2add esi,2sub eax,2jnz short main_loopdone:pop edipop esiretnull: _cdecl return上面的我死活没有想懂,为什么要两个字节一起比较?前面还有or edx,ediand edx,3 ; edx=0 iff buf1 are buf2 are alignedjz short dwords只要 dst , src 是 DWORD 对齐的,就一次比较 4 个字节dwords:mov ecx,eaxand eax,3 ; eax= counter for tail loopshr ecx,2jz short tail_loop_start; counter was &=4 so may check one dwordrep cmpsdjz short tail_loop_start&看来在不太增加代码复杂度的情况下每两字节可以少执行一次跳转。这部分是在两个缓冲区的起始地址没有对齐的情况下进行的。这样就是为了在性能上的一个折中,如果单个字节比较的话,跳转就太多,浪费CPU时钟,如果设置多余2个字节的比较的话,代码又太过冗长,超出了short的跳转范围,那么选择每两个字节进行比较的话,性能不但有所提升,而且代码也比较紧凑,没有超出short跳转的范围Com如何导出自定义结构 (VC/MFC ATL/ActiveX/COM)我想通过com的接口函数输入,输出一个自定义的结构.该结构内部还包含一个自定义的union.我该怎么作.我建立的是atl工程.(vc6.0中的atl).我的struct和别人的不同(我的struct里面不全是简单的数据结构(如int,char....),我的struct里面还包含一个union),那我该怎么办?那有没有好的方法能解决复合型的struct(就是struct里面,不仅仅只有简单的数据类型(int,char...)还包含其他的复杂结构(struct, union.....))对于普通的C++接口,任何自定义类型都可以作为接口函数类型,但如果是自动化接口,接口函数的参数必须是OLE变量类型,这时需要把自定义类型通过某种些技巧转化成等价的OLE变量类型,比如直接把结构封装成COM对象,之后传递接口给外部操作。都用COM实现了整个对象,没必要就因为参数的问题导至组件只能被C/C++调用.那也太划不来了&参见/document/viewdoc/?id=1404http://community.csdn.net/Expert/topic/.xml?temp=.1874048&一个托管的类指针对象,能转化成void*吗(.NET技术 VC.NET)混合了MFC和.NET framework的程序,一个函数的参数类型是void*,而现在想传给这个函数的变量类型是一个托管类指针,像__gc MyClass*,传不了,也强制转换不了。在不改变函数参数的前提下,有什么办法吗?A __gc pointer shall not be cast to a __nogc pointer. A pinning pointer can be implicitly converted to a __nogc pointer. This is the only mechanism provided for passing addresses in the common language runtime heap to functions expecting __nogc pointers. The primary use for this is passing such addresses to unmanaged functions in external DLLs.请问如何判断内置浏览器可以通过GoBack()和GoForward()来&后退、前进&? (.NET技术 C# )我用的是AxSHDocVw.AxWebBrowser请问那该如何得知是否可以&后退&或者&前进&呢?ExecCommand之前QueryStatus或者捕获CommandStateChang事件参考/library/default.asp?url=/workshop/browser/webbrowser/reference/ifaces/iwebbrowser2/goback.asp&CDHtmlDialog 的问题(js关闭ie的问题) (VC/MFC 界面 )我用CDHtmlDialog 来浏览网页这个网页中有一个按钮,点击次按钮,会掉用js来关闭IE但我的CDHtmlDialog能不能捕捉到这个事件呢?因为我的程序中只使用一个CDHtmlDialog来显示网页,当用户关闭这个CDHtmlDialog的时候我实际是让他ShowWindow(SW_HIDE),而不是真正的关闭,在下次用户要显示另一个网页的时候再show出来当用户点击网页中的关闭按钮后,我想先捕捉到这个&退出&事件,然后隐藏掉我的CDHtmlDialog可是现在用户点击网页中的退出按钮,我的dlg仍然还在,但这个CDHtmlDialog已经不可以再用了,好像里面的IE控件被关闭了如果用户的IE是5.5以上版本,捕获DWebBrowserEvents2::WindowClosing事件如果用户的IE是5.01及以下版本,捕获WM_PARENTNOTIFY消息并且判断消息来源是否是浏览器控件。OnQuit是IE专用的事件,浏览器控件不会被触发参见http://blog.csdn.net/jiangsheng/archive//3795.aspx今天看了回调函数发现有个__stdcall与cdecl 非常不解(VC/MFC 硬件/系统 )调用约定,使用不同的调用约定,则传递参数的顺序和方式会不同,例如多个参数的入栈顺序会不同,而象__fastcall约定会尽可能的使用寄存器传递参数因此如果一个__stdcall声明的函数通过__cdecl的方式去调用就会出现错误cdecl是C语言里面函数调用使用得最多的协议(可以说绝大多数都是这个,Unix/Linux下面清一色都是这个&&),主要特性是使用eax寄存器保存返回值(通常对于比较小的类型如此),调用方清栈(所以可以支持变参函数),另外它也是C/C++默认的调用协议(也就是说不额外声明的话,默认就是cdecl的)stdcall是Windows API标准的调用方式,所有的Windows API都是靠这个调用协议,好像一般callback也都是用这个的&&cdecl 参数从右至左入栈,函数负责清除堆栈,返回值的处理如下VC:除了浮点数之外的基本类型和大小小于或者等于8字节的结构根据大小不同保存在EAX或者EAX:EDX组合中浮点数和双精度数保存在fp0中大小超过8字节的,或者有构造函数、析构函数、虚函数之一的结构或者类在内存中返回。返回值在内存中时调用者会分配对应大小的内存,并且将其作为隐含的第一个参数传递。函数调用之后调用者负责清除这块内存。其它:某些编译器在按值传递有析构函数的类和结构时会强制转换成按地址传递。某些编译器会把所有返回值强制放在内存中stdcall同cdecl,但是函数调用者负责清除堆栈thiscallVC:同stdcall,但是this指针在ECX中传递,类和结构类型的返回值强制放在内存中。如果函数参数的数目可变,那么同cdecl,但是this指针成为隐含的第一个参数。其它:同stdcall,但是this指针成为隐含的第一个参数。fastcall除了开始两个大小小于4字节的参数会通过寄存器传递之外,其它同cdecl。64位平台上调用约定有所变化,但是我没有做过这方面的研究。参考文章/default.aspx/kb/100832http://p5./viewArticleByWWW.m?boardId=clanguage&articleId=clanguage_104ffea50e53121&boardOffset=0/cpp/FastDelegate.asp求graphics.h的库函数,我的VC没有这个库函数 (C/C++ C语言)那个库是16位的。Visual C++1.5以上版本不支持16位的库。如果你要使用这个图形库,可以使用Visual C++ 1.5版,或者使用Borland 的Turbo C++。ATL的调用(VC/MFC ATL/ActiveX/COM )假设我在他机用vc 的ATL新建了一个Simple Object,编译了一个dll;如果我想在本机新的atl工程中 Composite Control中使用这个dll的接口,通过CoCreateInstance()可以获取得到这个接口,但是前提是这个dll必须在本机注册,想请问下,如何在调用接口之前,不手动注册他机编译后的dll,而是通过程序来注册这个dll?调用COM的DllRegisterServer函数,被调用的COM要作为一个DLL的方式来导入DllRegisterServer。就是说用LoadLibrary函数来读取DLL文件然后调用DllRegisterServer。HINSTANCE hDLL = ::LoadLibrary(&*.dll&);typedef BOOL (_stdcall *lpRegHnd)(void);lpRegHnd regHND;regHND = (lpRegHnd)::GetProcess( hDLL, &DllRegisterServer&);if (regHND == NULL )return -1;regHND(); //register DLL;::FreeLibrary( hDLL );或者调用ShellExecute函数调用Regsvr32 来执行注册。The RegSvr32 utility installs a DLL as an in-process server. It invokes oneor more functions that are implemented by the application, and exported byname by the DLL. The primary task of these functions is to create or deleteappropriate registry entries. The following functions can be invoked byRegSvr32.a.. DllRegisterServer is used for installing DLLs. It should create anynecessary registry keys.b.. DllUnregisterServer is used for uninstalling DLLs. It should deleteany registry keys that are no longer needed.c.. DllInstall is used for both installing and uninstalling DLLs. It canbe used in addition to DllRegisterServer and DllUnregisterServer, or inplace of them. It is intended for DLLs that can be installed in more thanone way. Unlike DllRegisterServer and DllUnregisterServer, which take noarguments, DllInstall takes two arguments. The first is a Boolean value thatspecifies whether the DLL is being installed (TRUE) or uninstalled (FALSE).The second is a string that can be used to specify which installationprocedure to use.The following is the RegSvr32 command-line syntax. regsvr32 [flag1 [flag2 ...] DllName/uUninstall the DLL. If the /i flag is not included DllUnregisterServer willbe invoked./i:&string&Invoke DllInstall. If the /u flag is included, DllInstall is instructed touninstall the DLL, by setting the first parameter to FALSE. Otherwise, thefirst parameter will be set to TRUE, and DllInstall will install the DLL.The string following the colon will be passed in as the second parameter toDllInstall. It is used to specify which installation procedure is to beused. If /i is used without the colon and string literal, the secondparameter of DllInstall will be set to NULL. Unless the /n flag is included,DllRegisterServer or DllUnregisterServer will also be invoked./nDo not invoke DllRegisterServer or DllUnregisterServer. This flag can onlybe used in combination with /i./sSilent./cConsole output.If no flags are specified, RegSvr32 will install the DLL by invokingDllRegisterServer. To register a DLL named DllName.Dll by invoking its DllRegisterServerfunction, use the following command: regsvr32 dllname.dllTo unregister the DLL with DllInstall's &uninstall_1&procedure without also invoking DllUnregister, use the following command: regsvr32 /u /n /i:&uninstall_1& dllname.dll程序里使用 ie 控件的问题(VC/MFC 基础类)我的问题是, ie 包装类可以很好的工作,但是我不知道怎样取得它的 iWebBrowser2 接口ie包装类是 vc 自动生成的CWebBrowser2:public CWnd.CWnd::GetControlUnknown之后QueryInterface IID_IWEbBrowser2。注意GetControlUnknown之后不能ReleaseCHtmlView中的ScrollBar的问题 (VC/MFC 界面 )当网页内容超过视图范围时,会有ScrollBar显示出来。现在我如何使ScrollBar不被显示出来1.通过修改网页 &frame noscroll=&noscroll&& 2./default.aspx?scid=en-Q324419你也可以自定义浏览器控件的容器,实现IDOCHostUIHandler的GetHostInfo方法。在VC7.0中比较简单一些,你可以直接使用CHTMLView和CDHTMLDialog内建的GetHostInfo方法,或者参考这两个类的源代码,在创建控件的时候使用类似于CBrowserControlSite的容器。在VC6中你需要用/kb/q236312/这样的方法在创建控件的时候使用自定义的容器。&插入USB盘的时候电脑会自动弹出一个打开列表的窗口,询问要做什么,请问如何把我自己的程序加到这个列表中,用我的程序打开? (VC/MFC 硬件/系统)HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Explorer/AutoplayHandlers/msdnmag/issues/01/11/autoplay/default.aspx&在WEB中读取网上领居的机器上的文件报权限不足,请问如何处理??网上邻居的文件已经设了共享且没加密码。 (.NET技术 ASP.NET )直接通过网上邻居用此形式就能访问是因为当前登录用户有权限asp.net进程是运行在服务器的aspnet用户下的,如果权限不足,可以让IIS服务和桌面程序交互,之后编一个桌面程序来和ASP.Net中的程序通讯(推荐),或者修改aspnet用户的权限(不推荐,容易造成安全问题)你也可以临时扮演一个有权限的用户角色。利用角色扮演类,执行这个类以后就是一管理员身份登陆系统后的权限。用法:using Susing System.DirectorySusing System.Runtime.InteropSusing System.Security.Pusing System.Security.P////// 用户模拟角色类。实现在程序段内进行用户角色模拟。/// public class IdentityImpersonation{[DllImport(&advapi32.dll&, SetLastError=true)]public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);[DllImport(&advapi32.dll&, CharSet=CharSet.Auto, SetLastError=true)]public extern static bool DuplicateToken(IntPtr ExistingTokenHandle, int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);[DllImport(&kernel32.dll&, CharSet=CharSet.Auto)]public extern static bool CloseHandle(IntPtr handle);// 要模拟的用户的用户名、密码、域(机器名)private String _sImperUprivate String _sImperPprivate String _sImperD// 记录模拟上下文private WindowsImpersonationContext _imperCprivate IntPtr _adminTprivate IntPtr _dupeT// 是否已停止模拟private Boolean _bC/// /// 构造函数/// /// 所要模拟的用户的用户名/// 所要模拟的用户的密码/// 所要模拟的用户所在的域public IdentityImpersonation(String impersonationUsername, String impersonationPassword, String impersonationDomain) {_sImperUsername = impersonationU_sImperPassword = impersonationP_sImperDomain = impersonationD_adminToken = IntPtr.Z_dupeToken = IntPtr.Z_bClosed =}/// /// 析构函数/// ~IdentityImpersonation() {if(!_bClosed) {StopImpersonate();}}/// /// 开始身份角色模拟。/// /// public Boolean BeginImpersonate() {Boolean bLogined = LogonUser(_sImperUsername, _sImperDomain, _sImperPassword, 2, 0, ref _adminToken);if(!bLogined) {}Boolean bDuped = DuplicateToken(_adminToken, 2, ref _dupeToken);if(!bDuped) {}WindowsIdentity fakeId = new WindowsIdentity(_dupeToken);_imperContext = fakeId.Impersonate();_bClosed =}/// /// 停止身分角色模拟。/// public void StopImpersonate() {_imperContext.Undo();CloseHandle(_dupeToken);CloseHandle(_adminToken);_bClosed =}}使用的时候在获取权限的时候这样写:IdentityImpersonation identityImpersonation = new IdentityImpersonation(&administrator&,&yourpassword&,&yourhostname&);identityImpersonation.BeginImpersonate();//开始管理员扮演//特殊操作.........identityImpersonation.StopImpersonate(); //结束扮演&在基于CSrollView为基类的程序中,使用CRectTracker(橡皮筋类),在视图出现滚动条时,CRectTracker不能正常显示(VC/MFC 界面 )我的程序中视图基于CSrollView,并且使用了CRectTracker类(橡皮筋类),在视图中没有出现滚动条时,CRectTracker类(橡皮筋类)显示正常,可以正常的随鼠标移动,扩大,缩小等操作;但是当视图出现滚动条时,当CRectTracker类(橡皮筋类)没有被当前视图所包含时,移动视图滚动条,移动视图时则不能出现CRectTracker,不知道这是什么问题?怎么解决?void CMonitorView::OnDraw(CDC* pDC){CMonitorDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDoc-&m_Viewfinder.Draw(pDC) ;//显示矩形&橡皮筋框架&}我添加了对应移动滚动条的OnScroll函数以使得OnDraw函数得以响应,BOOL CMonitorView::OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll) {CRect rectTCMonitorDoc* pDoc = GetDocument();ASSERT(pDoc != NULL) ;pDoc-&m_Viewfinder.GetTrueRect(&rectTrue); //获得&橡皮筋框架&InvalidateRect(&rcClientTrue); //设置待更新显示矩形区域 }但是问题依然存在CRectTracker本来就是直接画到屏幕上的,没有通过正常的WM_PAINT消息处理过程来画。你应该把画图部分封装出来给拖放过程和重画过程共享。MSDN中的DrawCli示例(MFC)可以作为参考。使用CHtmlView,希望能在页面下载后,使页面自动滚屏 (VC/MFC HTML/XML )HRESULT CMyDHTMLDialog::scrollToBottom(){HRESULT hr= S_FALSE;IDispatch* spDoc=NULL;m_pWebBrowseAPPr-&get_Document(&spDoc);if(pDoc){IHTMLDocument2 *pHTMLDoc = NULL;theResult = pDoc-&queryInterface(IID_IHTMLDocument2, (LPVOID*)&pHTMLDoc);ASSERT(pHTMLDoc);IHTMLElement *pBody = NULL;hr= pHTMLDoc-&get_body(&pBody);ASSERT(pBody);IHTMLElement2 *pElement = NULL;hr= pBody-&QueryInterface(IID_IHTMLElement2,(LPVOID*)&pElement);ASSERT(pElement);pElement-&put_scrollTop(1000000); // Scroll to bottom.hr= pElement-&Release();hr= pBody-&Release();hr= pHTMLDoc-&Release();hr= pDoc-&Release();}}让IE通过程序控制实现滚动的方法,谢谢(VC/MFC 界面)我想通过程序控制,使IE(Internet Explorer)浏览器滚动起来,比如在IE中输入.cn,由于新浪的首页很长,因此IE会出现一个垂直滚动条,请问如何通过程序控制使IE的水平和垂直滚动条能够滚动起来?我试过了给指IE窗口发送WM_VSCROLL消息,可是不行。请问哪位知道如何实现??谢谢!我想实现的东西,简单来说,可以抽象成下面的函数:void ScrollIE(HWND hWndIE, BOOL bVertical){// 如果bVertical为TRUE, 则使句柄hWndIE对应的IE窗口的// 垂直滚动条从最顶部逐步滚动到最底部,每次向下滚动1/3屏幕;// 如果bVertical为FALSE, 则使句柄hWndIE对应的IE窗口的// 水平滚动条从最左端逐步滚动到最右端,每次向右滚动1/3屏幕;// IE主窗口的内容也应随着滚动条的滚动而相应滚动}#include &Mshtml.h&#include &atlbase.h&#include &oleacc.h&void ScrollIE(HWND hWnd, BOOL bVertical){RECT::GetClientRect(hWnd, &rc);IHTMLDocument2* pDoc2 = NULL;LRESULT lRHINSTANCE hInst = ::LoadLibrary( _T(&OLEACC.DLL&) );UINT nMsg = ::RegisterWindowMessage( _T(&WM_HTML_GETOBJECT&) );::SendMessageTimeout(hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T(&ObjectFromLresult&) );if ( pfObjectFromLresult != NULL ){HRESULTIHTMLDocument2* pDhr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&pDoc);if ( SUCCEEDED(hr) ){CComPtr&IDispatch& spDCComQIPtr&IHTMLWindow2& spWpDoc-&get_Script( &spDisp );pDoc-&Release();spWin = spDif (bVertical)spWin-&scroll(0, (rc.bottom -rc.top)/3);elsespWin-&scroll((rc.right-rc.left)/3, 0);}}}指定一个很大的滚动距离就可以从最顶部滚动到最底部,访问body的scroll*属性可以知道IE窗口的总象素宽度和总的象素高度(包括不可见部分)。IHTMLDocument2* pDspWin-&get_document(&pDocument);IHTMLElement* pEpDocument-&get_body(&pElement);IHTMLElement2* pElement2;pElement-&QueryInterface(IID_IHTMLElement2, (void**)&pElement2);long iHpElement2-&get_scrollHeight(&iHeight);long iWpElement2-&get_scrollWidth(&iWidth);如何得到WebBrowser控件里网页的源代码?? (.NET技术 C# )document.body.innerHTML得到只是body里的源码,我要得到整个网页的源码using(FileStream stream = new FileStream(@&c:/mafile.txt&, FileMode.Create,FileAccess.Write, FileShare.None) ) {ComStream cstream = new ComStream( stream );IPersistStreamInit persistentStreamInit =(IPersistStreamInit)axWebBrowser1.DpersistentStreamInit.Save( cstream, 0 );/247reference/msgs/8/43441.aspx如何在VC6下生成缩略图? (VC/MFC 图形处理/算法 )打开jpg 或 bmp 图片文件,快速生成象Windows资源管理器中的缩略图?要求对批量图片处理,速度要快,不是对每副图片直接进行图形变换。象Windows资源管理器中快速批量生成缩略图一样。1 只有在要显示之前才生成缩略图2 在硬盘上生成缓存的交换文件,缓存过大容易造成内存不足影响性能3 在内存中缓存最近查看的少量缩略图4 监视文件夹的文件更改以更新内存和磁盘中的缩略图缓存MFC 与 .NET (.NET技术 .NET Framework)请比较一下这两者哪个更有前途?你要二选一?这两个又不是互斥的,只是两个类库而已。MFC的很多类和函数依赖于线程和模块的状态(包括CString::LoadString,CWnd::AssertValid等等),这样如果你的线程中用到了这些MFC的类和函数,那么这个线程就需要是MFC创建的。MFC的消息和命令的处理流程也和.Net的有区别,以至于在MFC程序中嵌入.Net代码十分繁琐。.Net 1.0不支持将.Net控件嵌入MFC控件容器,但是从.Net 1.1开始支持了这个做法。MFC 8.0则增加了一些模板类来简化在MFC程序中嵌入WinForm的工作。MFC的DLL是非托管的,但是可以和托管代码一起工作。托管代码中当然可以引用程序集混合了非托管代码的程序很可能较难不加修改的移植到其它平台,尤其是在非托管代码包含对特定操作系统的API调用的情况下为什么在mainframe里给菜单项加消息处理没问题,在view类里这样做菜单项会变灰(.NET技术 VC.NET )我的SDI程序用CSplitterWindow分为2个View,我想在右边的view里处理菜单消息,结果加了消息映射后菜单还是无效,如果把消息加到mainframe下就好了,请教原因是什么?我想加到View里应该如何做?命令消息首先被CWinApp类处理,默认的处理流程是CWinApp类-&主框架-&MDI子框架-&活动视图-&文档。如果你要自定义处理流程,可以在处理流程中处理这个命令并/或转发到其他CCmdTarget派生类。只有一个视图的时候,视图总是框架的活动视图。用户可以通过界面操作来设置活动视图。如果要用程序设置,调用CSplitterWnd::SetActivePane参考/docview/splitcmdroute.asp如何保存打印设置(VC/MFC 基础类)对CPrintDialog 多个打印机,我想选定一个,之后每次打印的时候不需要再选择了。需要把选定的打印机保存到磁盘中&/kb/q166129/怎样实现视图的比例缩放(VC/MFC 基础类)我想在controlBar上放一个Combo Box控件,然后象word那样可以选定缩放比例进行视图缩放?还有,如何controlBar如何停靠在工具栏的右边?/docview/McCZoomView.asp/library/en-us/vcsample/html/_sample_mfc_CTRLBARS.asphttp://search.csdn.net/Expert/topic/714/714468.xmlVB.net使用脚本,如何让脚本访问主程序的过程或函数(.NET技术 VB.NET )读了《VB-Helper:坚守脚本》(见/china/msdn/library/langtool/vbnet/VSFreakOut.mspx)有很多疑问。我下载了示例,由两个工程构成,一个主程序,一个DLL脚本可以访问DLL中的过程和函数,但我不知道DLL中的过程如何去调用主程序的过程(我不知道用没有这个可能性)我想知道如何才能实现通过脚本去访问主程序中的过程、函数。例如主程序中有一个模块,其中有一个全局子程序AAA,如何才能使得脚本中可以使用AAA子程序?顶着有分。恳请大家指教。.Net可以使用反射,但是你或许会被反射搞昏头。一个常见的解决方案是声明一些全局对象,类似于IE的脚本引擎中的window对象或者Office自动化中的_Application对象。脚本引擎需要做一些工作来在用户访问之前初始化这些全局对象。全局或者内建函数也是可以考虑的做法。关于ActiveX使用默认参数的问题(VC/MFC ATL/ActiveX/COM )我使用ActiveX控件包装了自己的一个类, 但是如何把类方法中缺省默认参数引出去?也就是说如何在ActiveX中使用缺省的默认参数?I dont know of any way you can use Class Wizard to add methods that haveoptional parameters. The way that I created the methods was to add theoptional parameter in the .odl. The optional parameter needs to be of typeVARIANT. When VB (or anyone else) calls the function without the optionalparameter the VARIANT will contain VARIANT.vt = VT_ERROR VARIANT.scode =DISP_E_PARAMNOTFOUND..idl (may be slightly different syntax in .odl)[id(1030), helpstring(&method Close&)] HRESULT Close([in, optional] VARIANTbSaveChanges, [in, optional] VARIANT strFileName);.hSTDMETHOD(Close)(THIS_ /*[in, optional]*/ VARIANT varSaveChanges, /*[in,optional]*/ VARIANT varFileName);.cppSTDMETHODIMP CDoc::XDoc::Close(VARIANT varSaveChanges,VARIANT varFileName){....}Check out KB articlesQ154039 How To Pass Optional Arguments to MFC ActiveX ControlsQ158451 How To Call Automation Methods with Variable Argument Lists如何实现COM中类的嵌套(VC/MFC ATL/ActiveX/COM )比如:Product类-Part类-ADD方法我调用的时候,可以实现如下:product.part.add这是通过IDispatch类型的属性来实现的。参加/library/en-us/vcmfc98/html/_mfcnotes_tn065.asp请问在ActiveX控件里面怎么做出CScrollView那种可以滚动的效果 (VC/MFC ATL/ActiveX/COM )直接对滚动条进行设置的话就得处理好多消息,还得在画的时候算坐标在控件里创建一个SCrollViewDesigning ActiveX Components with the MFC Document/View Model By exploiting MFC's poorly understood document/view model, you can give your ActiveX component many great features with relatively little effort /mind/0497/mfc.asp 为什么在windows服务程序中WinInet API访问不了外网(VC/MFC 网络编程 )HttpSendRequest失败, 错误是连接失败。同样的程序在非服务状态下是可以访问外网的。在服务状态下可以访问内网的web服务器,却访问不了外网。难道是服务安全配置的问题?请教INFO: WinInet Not Supported for Use in Services/kb/q238425/AcitveX控件使用了GDI+后,编译的时候为什么会死机?(VC/MFC ATL/ActiveX/COM )就在这一步:Registering ActiveX Control...我是在App类的InitInstance中初始化的Gdi+,把初始化语句去掉以后就好了,但GDI+的类也不能用了BOOL CLAvxApp::InitInstance(){BOOL bInit = COleControlModule::InitInstance();if (bInit){if(GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL)!=Ok){return FALSE;}}return bI}不能这样做。CLAvxApp::InitInstance实际上是封装了DLLMain,而GdiplusStartup本质上是加载GDI+的DLL,这会间接调用CLAvxApp::InitInstance封装的DLLMain,造成死锁。你可以在ActiveX的构造函数中初始化GDI+。如何修改WMV文件的版权信息(VB 多媒体 )如何修改WMV文件的版权信息!就是我自己编写的程序已经压缩成WMV了!没有版权限制!这时我需要一个程序可以把我自己的WMV文件的版权标题等信息进行任意修改!参考MetadataEdit示例(MSDN)/library/en-us/wmform95/htm/sampleapplications.asp/library/default.asp?url=/library/en-us/wmform95/htm/iwmheaderinfointerface.asp/library/en-us/wmform95/htm/workingwithmetadata.aspWebBrowse中,如何将页面滚动到指定位置(VC/MFC ATL/ActiveX/COM )例如模仿查找功能,查找一段链接或者一段文字,找到后自动调到该位置。已经可以拿到页面的各个元素了,但是无法定位它们在页面中的位置。scrollIntoViewYou can also determine the location, width, and height of an object by using a combination of the IHTMLElement::offsetLeft, IHTMLElement::offsetTop, IHTMLElement::offsetHeight, and IHTMLElement::offsetWidth properties. These numeric properties specify the physical coordinates and dimensions of the object relative to the object's offset parent. For more information about how to access the dimension and location of objects on the page through the Dynamic HTML (DHTML) Document Object Model (DOM), see Measuring Element Dimension and Location. /workshop/author/om/measuring.asp如何在MFC程序中不使用Unicode编译而创建支持Unicode的窗口? (VC/MFC 进程/线程/DLL )现在我需要让程序窗口(使用了MFC)支持Unicode文字的显示,如果能进行Unicode版的编译就很好了,可是由于程序原来的设计就没有考虑到Unicode版编译的问题,移植的工作量非常大,我在网上看到有人介绍了一种方法:在非Unicode版的程序上,通过调用RegisterClassExW来注册窗口类,调用CreateWindowExW来创建窗口,使得窗口成为支持Unicode的窗口.我在一个没使用MFC的程序中用此法成功了,可是在用了MFC的程序中却无法成功,程序没有报错,但创建的窗口却不是Unicode的(IsWindowUnicode()返回false)请问这是为什么?有办法解决吗?Create your window in a seperate module. Write a COM object such as ActiveX, for example./library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/iswindowunicode.aspThe character set of a window is determined by the use of the RegisterClass function. If the window class was registered with the ANSI version of RegisterClass (RegisterClassA), the character set of the window is ANSI. If the window class was registered with the Unicode version of RegisterClass (RegisterClassW), the character set of the window is Unicode.通过IHTMLElement的put_innerText方法更改对象的内容为什么会自动转换为HTML代码呢? (VC/MFC ATL/ActiveX/COM )代码如下:IHTMLDocument3 *IHTMLElement *CppWebBrowser1-&Document-&QueryInterface(IID_IHTMLDocument3,(void**)&doc);HRESULT ret = doc-&getElementById(L&insScript&, &ele);if(ret == S_OK){ele-&put_innerText(L&&script language=javascript&/r/n&/script&&);}这样插入的脚本并不会执行, 而且断行地方,会自动加上&br/&,这可不是我想要的啊?void CCEditView::OnInsertScript() {CInsertScriptDlg* pDlg = new CInsertScriptDlg();CString strPos = &BeforeEnd&;pDlg-&m_strScript = &Insert your script here:&;if ( pDlg-&DoModal() == IDOK ){IHTMLElement *pElement= NULL;if (SUCCEEDED(HrGetElementFromSelection(&pElement))){CString strScript = (!pDlg-&m_bVB) ? (&&nbsp&script Language=JScript&/n&!-- /n& + pDlg-&m_strScript + &/n// --&/n&/script&&): (&&nbsp&script Language=VBScript&/n&!-- /n& + pDlg-&m_strScript + &/n' --&/n&/script&&);BSTR bstrPos = strPos.AllocSysString();BSTR bstrContent = strScript.AllocSysString();pElement-&insertAdjacentHTML( bstrPos, bstrContent );::SysFreeString(bstrPos);::SysFreeString(bstrContent);pElement-&Release();}}delete pD}
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:608209次
积分:6218
积分:6218
排名:第1488名
原创:108篇
评论:326条
(1)(2)(3)(1)(1)(1)(1)(2)(2)(1)(1)(1)(1)(2)(1)(1)(1)(7)(1)(1)(1)(1)(2)(2)(2)(3)(4)(1)(1)(1)(2)(4)(2)(8)(5)(3)(1)(1)(6)(4)(2)(3)(5)(1)(1)(1)(1)(11)}

我要回帖

更多关于 webusercontrol 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信