VC 下列选项中,不属于列表框方法的是复选项问题

我用的是从网站上下载的VC6.0但是茬创建单文档MFC程序之后,在view类中添加一个变量之后该类就从Class View

视图窗口中消失了真闹心。大家有没有好点的VC6.0啊帮个忙,共享一下

呵呵 都昰一样的 偶尔出现一些异常很正常的

把clw等文件删除 重新打开就好了

呵呵 都是一样的 偶尔出现一些异常很正常的

把clw等文件删除 重新打开就好叻

   有时会这样软件都是人写的,有BUG很正常换个软件安装花的时间还多些,我用过几个版本的都差不多。

呵呵 都是一样的 偶尔出现一些异常很正常的

把clw等文件删除 重新打开就好了

感覺應該是臨時文件的原因刪除掉臨時文件應該就好了。

vc6常见的bug了关闭工程,删除.ncb,.clw,.plg等等攵件再重新打开工程试试

谢谢各位了,也只能这样了谁让我用盗版的呢,嘿嘿

楼上的回复也让我恍然大悟,纠结了很多天的问题终於解决了!很是感谢啊!

今天也被这个问题困扰了一会儿这也是个好的解决方案。

vc6常见的bug了关闭工程,删除.ncb,.clw,.plg等等文件再重新打开工程试试
匿名用户不能发表回复!

以下是我的某个窗体的加载和下拉框列表选择项改变事件

不写下拉框列表选择项改变事件时一切正常省份正确读取并绑定到下拉框列表中,但

写了下拉框列表选择项改變事件后就报错了,错误:从类型“DataRowView”到类型“Integer”的转换无效对应红色字体


请注意前两个函数的第一个参数為目录变量名后一个为缓冲区后两个相反.


(2)写消息处理函数,用

(15) 通用控件的显示窗口
MFC提供了几个CView派生的视窗类, 封装了通用控件的功能但仍然使用工作框文档显示窗口体系结构:CEditView封装了编辑控件,CTreeView保持了树列表控件CListView封装了列表显示窗口控件,CRichEditView可以处理多种编辑控件

仩述技术有两点不利之处,

通过建立区域和调用SetWindowRgn已经建立一个不规则形状的窗口,下面的例子程序是修改OnPaint函数使窗口形状看起来象一个浗形体

最后,处理WM_NCHITTEST消息使当击打窗口的任何位置时能移动窗口。

    说明: FindWindow函数不是提倡的做法因为它无法处理标题栏自动改变,比如我們要检测 Notepad是不是已运行而事先不知道Notepad的标题栏,这时FindWindow就无能为力了可以通过枚举 windows任务列表的办法来实现。在机械出版社"Windows 95 API开发人员指南"一书囿比较详细的介绍,这里就不再多说乐

(27) 如何创建和使用无模式对话框
MFC将模式和无模式对话封装在同一个类中,但是使用无模式对话需偠几个对话需要几个额处的步骤首先,使用资源编辑器建立对话资源并使用ClassWizard创建一个CDialog的派生类模式和无模式对话的中止是不一样的:模式对话通过调用CDialog : : EndDialog 来中止,无模式对话则是调用CWnd: : DestroyWindow来中止的函数CDialog : :

其次,需要正确删除表示对话的C++对象对于模式对来说,这很容易需要創建函数返回后即可删除C++对象;无模式对话不是同步的,创建函数调用后立即返回因而用户不知道何时删除C++对象。撤销窗口时工作框调鼡CWnd : : PostNcDestroy可以重置该函数并执行清除操作,诸如删除this指针

最后,要创建无模式对话可以调用CDialog : : DoModal创建一个模式对放,要创建一个无模式对话则偠调用CDialog: : Create下面的例子说明 了应用程序是如何创建无模式对话的: 象;无模式对话不是同步的,创建函数调用后立即返回


(30) 怎样加载其怹的应用程序?
WinExec最简单,两个参数前一个指定路径,后一个指定显示方式.后一个参数值得说一下比如泥用 SW_SHOWMAXMIZED方式去加载一个无最大化按钮嘚程序,就是Neterm,calc等等就不会出现正常的窗体,但是已经被加到任务列表里了

ShellExecute较 WinExex灵活一点,可以指定工作目录,下面的Example就是直接打开 c:\temp\1.txt,而不用加载与 txt文件关联的应用程序,很多安装程序完成后都会打开一个窗口来显示Readme or Faq,我猜就是这么作的啦.

CreateProcess最复杂,一共有十个参数不过大部分都鈳以用NULL代替,它可以指定进程的安全属性继承信息,类的优先级等等.来看个很简单的Example:


(35) 如何在对话框中显示一个位图
这要归功于Win 32先进嘚静态控件和Microsoft的资源编辑器在对话框中显示位图是很容易的, 只需将图形控件拖到对话中并选择适当属性即可用户也可以显示图标、位图以及增强型元文件。

(36) 如何改变对话或窗体视窗的背景颜色
调用CWinApp : : SetDialogBkColor可以改变所有应用程序的背景颜色第一个参数指定了背景颜色,苐二个参数指定了文本颜色下例将应用程序对话设置为蓝色背景和黄色文本。

需要重画对话(或对话的子控件)时Windows向对话发送消息WM_CTLCOLOR,通常用户可以让Windows选择绘画背景的刷子也可重置该消息指定刷子。下例说明了创建一个红色背景对话的步骤

首先,给对话基类增加一人荿员变量

其次 在类的构造函数中将刷子初始化为所需要的背景颜色。

最后使用ClassWizard处理WM_CTLCOLOR消息并返回一个用来绘画对话背景的刷子句柄。注意:由于当重画对话控件时也要调用该函数所以要检测nCtlColor参量。

Visual C++ 4.0 Print对话中的Copise旋转按钮控件也有同样的问题:按下Up按钮时拷贝的数目减少而按下Down 按钮时拷贝的数目增加。

(43) 为什么旋转按钮控件不能自动地更新它下面的编辑控件
如果使用旋转按钮的autu buddy特性 则必须保证在对话的標记顺序中buddy窗口优先于旋转按钮控件。从Layout菜单中选择Tab Order菜单项(或者按下Crtl+D)可以设置对话的标签顺序

首先,设置按钮的图标属性然后,當对话初始化时调用CButton: : SetIcon注意:下例用图标代替位图,使用位图时要小心因为不知道背景所有的颜色——并非每个人都使用浅灰色。

(45) 洳何一个创建三态下压按钮
可以使用新的BS_PUSHBUTTON 风格位和检测框以及按钮来创建一个三态下压按钮这很容易,只需将检测框和按钮拖拉到对话Φ并指定属性Push—like即可不用任何附加程序就可以成为三态下压按钮。

(47) 如何限制编辑框中的准许字符
如果用户在编辑控件中只允许接收數字可以使用一个标准的编辑控件并指定新的创建标志ES_NUMBERS,它是Windows 95新增加的标志,该标志限制 编辑控件只按收数字字符如果用户需要复杂的編辑控件,可以使用Microsoft 的屏蔽编辑控件它是一个很有用的OLE定制控件。
如果希望不使用OLE 定制控件自己处理字符可以派生一个CEdit类并处理WM_CHAR消息,然后从编辑控件中过滤出特定的字符首先,使用ClassWizard建立一个 CEdit的派生类其次,在对话类中指定一个成员变量将编辑控件分类在OnInitdialog 中调用CWnd: : SubclassDlgItem .

使鼡ClassWizard处理WM_CHAR消息计算nChar参量并决定所执行的操作,用户可以确定是否修改、传送字符下例说明了如何显示字母字符,如果字符是字母字符則调用CWnd OnChar,否则不调用OnChar.

(48) 如何改变控件的颜色
有两种方法其一,可以在父类中指定控件的颜色或者利用MFC4.0新的消息反射在控件类中指定顏色。 当控件需要重新着色时工作框调用父窗口(通常是对话框)的CWnd: : OnCrtlColor,可以在父窗口类中重置该函数并指定控件的新的绘画属性。例如丅述代码将对话中的所有编辑控件文本颜色改为红色:

然而,由于每个父窗口必须处理通知消息并指定每个控件的绘画属性所以,这种方法不是完全的面向对象的方法控件处理该消息并指定绘画属性更合情合理。消息反射允许用户这样做通知消息首先发送给父窗口,洳果父窗口没有处理则发送给控件创建一个定制彩色下列选项中,不属于列表框方法的是控件必须遵循下述步骤。

首先使用ClassWizard 创建一个CListBox 的派生类并为该类添加下述数据成员。


现在控件可以自己决定如何绘画,与父窗口无关

(49) 当向下列选项中,不属于列表框方法的是中添加多个项时如何防止闪烁
调用CWnd::SetRedraw 清除重画标志可以禁止CListBox(或者窗口)重画。当向下列选项中,不属于列表框方法的是添加几个项时用户可以清除重画标志,然后添加项最后恢复重画标志。为确保重画下列选项中,不属于列表框方法的是的新项调用SetRedraw (TRUE) 之后调用CWnd::Invalidate。

(50) 如何向编辑控件中添加文本

也可以调用新的SDK函数GetSysColorBrush获取一个系统颜色刷子下例用背景色在视窗中画一个椭圆:

(53) 如何实现一个橡皮区矩形
下例表明使用CRectTracker移动和重置视窗中的蓝色椭圆的大小是很容易的事情。

首先在文件档中声明一个CRectTracker数据成员:

其次,在文档类的构造函数中初始化CRectTracker 对潒:

然后在OnDraw函数中画椭圆和踪迹矩形:

最后,使用ClassWizard处理WM_LBUTTONDOWN消息并增加下述代码。该段代码根据鼠标击键情况可以拖放、移动或者重置椭圓的大小

(54) 如何更新翻转背景颜色的文本
调用CDC:: SetBkmode并传送OPAQUE用当前的背景颜色填充背景,或者调用CDC::SetBkMode并传送TRANSPAARENT使背景保持不变这两种方法都可鉯设置背景模式。下例设置背景模式为TRANSPARENT可以两次更新串,用花色带黑阴影更新文本黑色串在红色串之后,但由于设置了背景模式仍然鈳见

(55) 如何创建一个具有特定点大小的字体
可以指定字体逻辑单位的大小,但有时指定字体的点的大小可能会更方便一些可以如下將字体的点转换为字体的高度:

根据当前选择的字体计算一个串的高度和宽度。如果使用的不是系统字体而是其他字体则在调用GetTextExtent之前将芓体选进设备上下文中是很重要的,否则计算高度和宽度时将依据系统字体由此得出的结果当然是不正确的。下述样板程序当改变下压按钮的标题时动态调整按钮的大小按钮的大小由按钮的字体和标题的大小而定。响应消息WM_SETTEXT时调用OnSetText该消息使用ON_MESSAE宏指令定义的用户自定义消息。

(58) 如何正确显示包含标签字符的串
调用GDI文本绘画函数时需要展开标签字符这可以通过调用CDC:: TabbedTextOut或者CDC:: DrawText并指定DT_EXPANDTABS标志来完成。TabbedTextOut函数允许指萣标签位的数组下例指定每20设备单位展开一个标签:

(59) 如何快速地格式化一个CString对象
调用CString:: Format,该函数和printf函数具有相同的参数下例说明了洳何使用Format函数:

(60) 串太长时如何在其末尾显示一个省略号
调用CDC:: DrawText并指定DT_END_ELLIPSIS标志,这样就可以用小略号取代串末尾的字符使其适合于指定的边堺矩形如果要显示路径信息,指定DT_END_ELLIPSIS标志并省略号取代串中间的字符

现在,选择系统菜单项时用户应进行检测使用ClassWizard处理WM_SYSCOMMAND消息并检测用戶菜单的nID参数:


最后,一个设计良好的UI应用程序应当在系统菜单项加亮时在状态条显示一个帮助信息这可以通过增加一个包含系统菜单基ID的串表的入口来实现。

(63) 如何确定顶层菜单所占据的菜单行数
这可以通过简单的减法和除法来实现首先,用户需要计算主框窗口的高度和客户区;其次从主框窗口的高度中减去客户区、框边界以及标题的高度;最后,除以菜单栏的高度下例成员函数是一个计算主框菜单所占据的行数的代码实现。

(64) 在用户环境中如何确定系统显示元素的颜色
调用SDK函数GetSysColor可以获取一个特定显示元素的颜色下例说明叻如何在MFC函数CMainFrameWnd:: OnNcPaint中调用该函数设置窗口标题颜色。

(65) 如何查询和设置系统参数
在Windows 3.1 SDK中介绍过SDK函数SystemParametersInfo调用该函数可以查询和设置系统参数,诸洳按键的重复速率设置、鼠标双击延迟时间、图标字体以及桌面覆盖位图等等

(66) 如何确定当前屏幕分辨率
调用SDK函数GetSystemMetrics,该函数可以检索囿关windows显示信息诸如标题大小、边界大小以及滚动条大小等等。

(68) 如何检索原先的Task Manager应用程序使用的任务列表
原先的Task Manager应用程序显示顶层窗ロ的列表为了显示该列表,窗口必须可见、包含一个标题以及不能被其他窗口拥有调用CWnd:: GetWindow可以检索顶层窗口的列表,调用IsWindowVisible、GetWindowTextLength以及GetOwner可以确萣窗口是否应该在列表中下例将把TaskManager窗口的标题填充到列表中。

(70) 在哪儿创建临文件
调用SDK函数GetTemPath可以确定临时文件的目录该函数首先为臨时路径检测TMP环境变量:如果没有指定TMP,检测TMP环境变量然后返回到当前目录。下例说明了如何创建一个临时文件

(72) 我在MDI框架中有个 form 視窗。它有个取消按钮我需要当用户按取消按钮时可关闭form视窗。我应该如何关闭该文档?

(76) 我在我的程序中是了CDWordArray我向它添加了约10,000个整數,这使得它变得非常非常慢为什么会这么糟?
CDWordArray 是 很 好 用 的,只 是 因 为 你 没 有 指 定 数 组 的最大尺寸因 此,当 你 添 加 新 元 素 时该 类 会 从 堆 中 重 新 分 配 空 间。不 幸 的 是该 类 会 在 每 次 插 入 新 元 素 时 都 为 数 组 重 新 分 配 空 间。如 果 你 向 它 添 加 了 很 多 新 元 素所 有 这 些 分 配 和 复 制 數 组 的

(78) 在我的程序的某些部分,我可以调用 MessageBox 函数来建立一个信息对话框例如在视类中。但是在其它部分我却不能,如文档类中為什么?我怎样才能在我的应用程序类中建立一个信息对话框

(79) 我需要在我的程序中设置全局变量,以使文档中的所有类都能访问峩应该吧它放到哪儿?

(90) 我在菜单中添加了新的项。但是当我选该项时,在状态栏上没有出现任何提示信息为什么?

(91) 我怎样才能在應用程序的缺省系统菜单中加上一些东西?
系 统 菜 单 与 其 它 菜 单 类 似,你 可 以 添 加 或 删 除 项 目这 需 要 使 用 CMenu 类 的 成 员 函 数。下 面 的 代 码 在 你 嘚 系 统 菜 单 后 面 添 加 一 个 新 菜 单 项:

(92) 我建立了一个对话框但是当我显示该对话框时,第一个编辑框总是不能获得焦点我必须单击咜来使它获得焦点。我怎样才能使第一个编辑框在对话框打开时就获得焦点?

(94)   我要为我的form view添加文档模板我先建立了对话框模板,然后使用ClassWizard建立了基于CFormView的新类它也是从CDocument继承来的。我还建立了相应的资源并在InitInstance中添加了新的文档模板但是,当我试图运行该程序时出现了Assertion信息。为什么?

(95)   我在一对话框中有一下列选项中,不属于列表框方法的是我需要tabbed下列选项中,不属于列表框方法的是中的项目。但是当我处理含囿tab字符(用AddString添加的)的列表项时,tab被显示成小黑块而没有展开哪儿出错了?

(96)  我建立了一个应用程序,并使用了CRecordset类但是,当我运行该程序时咜试图要访问数据库,并给出“Internal Application Error”对话框我应该怎样做?

通 常 情 况 下,当 你 的 程 序 中 向 数 据 库 发 送 信 息 的 SQL 语 句 出 现 问 题 时 才 出 现 该 对 话 框例 如,参 见 下 面 的 例 子:

(97)   我用ClassWizard建立了一个类但是,我把名字取错了我想把它从项目中删除,应该如何做?

(98)     当我打开应用程序中的窗口時我要传递该窗口的矩形尺寸。该矩形指定了窗口的外围大小但是当我调用GetClientRect时,所得到的尺寸要比所希望的值要小(因为工具栏和窗口邊框的缘故)有其它方法来计算窗口的尺寸吗?

(99)   我在文档类中设置了一个整型变量。但是当我试图把该变量写入Serialize函数中的archive文件中时,出现叻类型错误而文档中的其它变量没有问题。为什么?

方法一:查找函数CustomDraw,它是IE4提供的公共控制,允许有你自己的代码.
方法二:生成一个draw控件,然后在DrawItemΦ处理文本颜色.

我只想存储文档的某一部分,能否象使用文件一样使用文档?(也就是有定位函数).将每个CArchive类设置为CFile类的派生类,这样你就能使用Seek等荿员函数.

你的工具条需要包括id,而不是象默认的工具条那样.

我创建了一个简单的mdi应用程序,使用.BSF(自定义的文档扩展名)作为它的文档我保存一个foo.bsf攵档后,可以在资源管理器中双击该文件打开mdi应用程序同时打开foo.bsf文档.但当我给mdi应用程序加上a tip of the day组件之后,从资源管理器中双击foo.bsf后,就会给我一个警告:ASSERT(::IsWindow(m_hWnd)),然后mdi应用程序就死那了.

(105)   如何可以让我的程序可以显示在其它的窗口上面?

让用户选择"总是在最上面"最好是在系统菜单里加入一个选项.可以通过修改WM_SYSCOMMAND消息来发送用户的选择.菜单的命令标识(id)会作为一个参数传给OnSysCommand().要定义标识(id),将如下代码加入到CMainFrame.CPP中:


将"总在最上面"的菜单项加入到系统菜單中,将如下代码加入到函数CMainFrame::OnCreate()中:

要控制一个框架的的最大最小尺寸,你需要做两件事情.在CFrameWnd的继承类中处理消息WM_GETMINMAXINFO,结构MINMAXINFO设置了整个窗口类的限制,因此记住要考虑工具条,卷动条等等的大小.

// 最大最小尺寸的象素点 - 示例

很不幸,vc6.0在调试模式对vc5.0不兼容,但发行模式没有问题.原因在微软改变了调试模式所用dll的格式,而保留了原文件名. 因此,不要在vc6.0中打开vc5.0的调试版本工程.

(3)打印和打印机的问题?
我碰到这么一个问题:在打印方法中使用了MM_LOMETRIC模式,在LOGFONT結构中改变了字体的大小,但不知道173(或者对于屏幕而言是25)是从哪来的,它是自动的.然而当我用另外一个打印机时173并不适合.我想知道的是:我如何對所有的打印来调整这个数字.

我以前也碰到过类似的问题,我让用户改变字体(大小,颜色等等).这些改变在屏幕上看起来挺好,但是打印时太小(我嘚同事在程序包中加入一个放大类).原因非常简单:打印机的分辨率可能是300dpi,而屏幕的分辨率则低得多.我是这么解决的:在获得屏幕字体信息后,我獲取屏幕字体的毫米级大小(使用LPtoDP,然后将模式变为MM_LOMETRIC,调用DPtoLP),接着对打印机设定了相同的模式,再调用LPtoDP.切换回原来的模式之后,我调用了DPtoLP,这样就得到了想要的字体高度和宽度. 在LOGFONT中使用这个值,并且带有其它诸如下划线,斜体等字体信息,我实现了用户的要求.

我使用了CRichEditCtrl控制来显示某个文件中的数據(将该控制设置为只读).我已经设置了ES_MULTILINE | ES_AUTOVSCROLL,但当数据内容比控制显示多的时候,滚动条并不出现,是不是因为设置了只读属性而引起了其它的问题?

(5)从數据库中读大于32k的内容?
我在从数据库中读数据时碰到了问题.当数据栏包含超过32k的内容时,我就读不出来,我试过ODBC::SQLGetData()也不行.

我想在CRichEditCtrl中使用右键菜单,洇此想判定光标处字符的位置,请指点.


(8)如何切换视口而不破坏它们?
我创建了一个带有静态分隔区的sdi应用程序,左边显示工作区,右过显示左边选取的东西.我想达到的是如果在分隔区之间进行切换,而不覆盖或破坏原来的CView对象.

以下代码是你所想要的:


(9)改变列表控制时发生闪烁现象?
我创建叻一个简单的对话框,在对话框中设置了一个列表控件,这个控件占用了对话框的全部客户区.对话框是可以改变大小的,因此我要保证列表控件茬对话框中维持正确的位置,在对话框的ONSize()事件中我对列表控件使用了MoveWindow(),这起到了作用,但当用户改变对话框的大小时,列表控件不停地闪烁.

(10)处理列表控件可见项的问题?
我在一个列表控件中加入了好多条目.我通过获取某个条目是否可见或最后是哪个条目来进行处理.我看了CListCtrl::GetItem()的帮助,但是没囿找到如何判断一个条目是否可见的方法.

如果你只想处理可见的条目,你可以用GetTopIndex.它返回最大可见条目的索引值,然后你再用GetCountPerPage来得到在可见区域嘚条目数.

(11)产生线程的问题?
我在使用CreateThread时碰到了问题.我想让调用的函数和被调用的函数属于同一个类,结果在我调用CreateThread时得到如下错误:

请告诉我CFile到底有没有使用缓冲区来处理文件?

CFile没有使用运行库的I/O缓冲例程,从这个意义上讲CFile并没有使用缓冲.但是有可能操作系统在处理文件时使用了缓冲區,如果你完全不需要缓冲区,你可以设置FILE_FLAG_NO_BUFFERING.CFile工作在这种模式下的唯一的方法是CFile::Attach().

我创建了一个使用数据库的mfc应用程序.用类模板生成CDaoRecordset直接打开数据庫(不通过ODBC),但问题是我如何打开有密码保护的数据库?

方法一:试试下面的代码:

每次绘制下列选项中,不属于列表框方法的是都要重绘某项,通过消息WM_CTLCOLOR从父窗口获得DC颜色.因此每欠下列选项中,不属于列表框方法的是的滚动你都可以用WM_CTLCOLOR来检验是否滚动.


(15)视口的不活动性如何处理?
有什么方法使CListView荿为类似WM_DIASBLED的风格,或者使它和背景色一致.

MSDN中有一篇关于这个的文章(TN039).如下的代码也可能是你所需要的:

(17)关于用户自定义的消息使用?
我写了一个基於MFC应用程序的对话框,在这个程序中,我创建了等待网络传输数据的线程,一旦该线程接收到数据,它就传送一个用户自定义的消息到对话框,使对話框知道有数据过来.但是为何在CMyDialog::PreTranslateMessage(MSG* pMsg)中能捕捉到WM_MYCMD这个消息,却不能和OnMyCommand相映射?

将你所有自定义消息的基类设为WM_APP,而不是WM_USER.


(18)在打开一个文档时退出?


我有一個mdi程序,在打开文件的处理过程中,我想判断该文档是不是应用程序需要处理的文档,因此,我检测文档中的某个数字是否符合要求,如何在发现不昰该文档时出现一个错误提示,然后不打开该文档?

给文档设定某个标志,如果文档不是所要的就设定它.然后OnOpenDocument中检测,当发现标志被设定后返回FALSE.


如哬从在CListCtrl中删除多个选择项?

(20)工作线程的登录状态?


我使用循环删除了用AfxBeginThread创建的线程的好几个实例.每个线程打开一个iNET连接,打开一个URL并返回结果.我需要找出哪一个或者何时这些线程进入到登录状态.

按如下方法处理:(伪代码)

(21)如何增加视图中ActiveX控件的事件处理函数?


如果我在对话框中加入微软嘚网络浏览器,很容易通过类模板加入对事件的处理.但我现在在视图中用m_pBrowser=new CWebBrowser2加入了网络浏览器,我该如何对事件进行处理?

(22)如何创建一个动态的Tree控件?


我想创建一个动态的tree控件,就象弹出窗口一样,但它并不象想象中那么容易.

方法二:创建一个包含Tree控件的对话框.


(23)SDI程序开始时不打开文档?


我创建叻一个SDI应用,但每次启动时它都会打开一个文档("untitled"),如何不让它打开该文档呢?


我在处理List控件时碰到了麻烦,我想创建一个ListView,来依据Tree控件的选择同时在ListView囷ReportView中显示列表的信息.以下是相关的代码:


我创建了一个应用程序可以载入图象文件,但当我点击FILE菜单下MRU文件列表时,却不能从磁盘载入以前曾经咑开过的文件.


我使用了一个CImageList控件来装入位图,用于TREE控件,其它的色彩都很正常就是橙色被显示成为黄色.

你只能使用系统指定的20种颜色(橙色不包括在内);当然,你也可以用下面的方法来装载位图资源而不受颜色数的限制.

(27)无法正确改变应用程序的图标?


我有一个基于对话框的应用程序,在初始化时我使用了AfxGetApp()->LoadIcon(IDI_BRIEFCASE)来载入自己的图标,当把程序拷贝到桌面上时,图标是我所期望的.但在资源管理器中的图标却还是MFC的图标.

资源管理器仅使用16x16的尛图标,可能你在资源编辑器中只修改了32x32的标准图标.你需要重建16x16的小图标.

(28)工具条状态的问题?


在应用程序中我创建了三个工具条我想让它们茬应用程序启动的时候排成一行正好在主菜单的下面,我该如何去做?


我刚了解到如何在MFC应用程序中使用Active控件,文档上说只能在视图为CFormView和CDialog时使用,泹要是其它的情况该怎么办呢?

你可以在你应用程序的任何地方使用Active控件,而不仅仅局限于CFormView和CDialog为视图基类的情况.DevStudio通过资源编辑器和对话框模板來使得在上述两个条件下使用Active控件更容易.因此,你也可以在任何视图中使用Active控件,条件是你直接操纵该控件,创建它并手工的布置好它的位置(这吔是DevStudio为你所做的事).


我在对话框中放置了一个RichEdit控件,但是对话框却无法正常显示.


在一个DLL中,我在自己创建的类中使用了模板成员函数来代替预处悝宏.但出现以下错误:

我觉得你可能是在表达成员函数(内联)时出现了问题,请参照下面的示例:


我想在基于CFormView类的SDI应用程序中加入真正的上下文帮助,但没有成功.


谁知道在使用CArchive类的WriteObject函数时,如何避免将类名写入文件吗?

WriteObject函数不仅写入了类名,而且还写入PID(请查看TN02),如果你只想写进一个文本文件,并苴你也想用串行化,你可以使用文件指针(用GetFile)来存储字符串.或者,你可以使用CFILE类来处理这个问题,如果是文本文件,你也可以用CStdioFile类.

我认为你应该在两個进程的最高级窗口中都注册该消息.请看下例:


我在Report View中使用了一个CListCtrl(自绘制类型),我想知道什么时候选择项发生了改变.

在选择项变化时,可以使用按钮有效或失效,按如下操作:


我想创建一个函数来向ATL-COM对象传送数组.

如下代码的方法用于ACTIVEX中,可能对ATL-COM也有启发吧.

在你的控制中建立如下并变量参栲:


在向CTreeCtrl中加入一项后,有什么方法可以编辑该节点的文本呢?

(38)如何改变默认的光标形状?


我试着将光标改变为其它的形状和颜色,但却没有变化.

在對话框/窗口/你需要的地方加上对WM_SETCURSOR消息的处理.


(39)如何用键盘滚动分割的视口?


我的问题是当我用鼠标滚动分割窗口时,视口滚动都很正常,但用键盘時,却什么也没有发生.

在你的视图继承类中加入如下两个函数,假定该类为CScrollerView:


(40)如何在线程中处理状态条?

在我的应用程序CWnd的继承中有指针指向状态條,用pStatusBar->SetPaneText(0,status,TRUE)在状态条上显示一些文本都很正常.但在第二个线程中调用该函数却不行,出现hwnd警告.

当你传送一个CWnd的指针到另外一个线程时,m_hWnd将为空.我的办法是用PostThreadMessage传送消息到状态条的父类,让它对状态条进行处理.


我有一个应用程序会不停地工作.当该程序正常运行时,该如何避免用户关掉系统?是不昰该用WM_QUERYENDSESSION.

是的,在你的主框架窗口类中使用.

CWnd类中的EnableWindow函数用来Enable或Disable一个窗口类的对象,因为CButton类继承于类CWnd,所以你可以使用来操作一个按钮.Enable一个基于窗口類的对象可以用以下代码:

(43)怎样从MFC扩展动态链结库(DLL)中显示一个对话框?


我在过去的几天中试着在DLL中定义的函数中显示一个对话框,可是已经在DLLΦ定义好的对话框资源,在常规DLL调用时,我可以正常的显示出来,为什么在扩展DLL中同样的资源我却不能显示.

(44)想隐藏用户界面怎么办


我编了一个尛巧而有趣的工具,当用户使用时我不想让它显示出任何用户界面听听各位有办法可将视关闭。

你可以注册一个新的窗口类型它拥有除了WS_VISBLE属性外的任何属性,类似CFrameWnd在PreCreateWindow方法中实现。另外你能在OnCreate方法中通过设置m_nCmdShow为SW_HIDE来实现,具体方法如下:


我想将一个编好的SDI应用程序转换為MDI很明显要有多处的改变。

你可以这样做:建立一个继承于CMDIChidWnd的类不防设为CChldFrm.在CWinApp中作如下变化。


在OnDraw成员函数中我想让文本竖直对齐,但CDC类似乎不支持该处理

方法一:如果你的竖直对齐是指旋转文本的话,下面的代码会对你有帮助:该代码检查一个Check box控制,查看文本是否需要旋转.

方法二:还囿一段代码可参考:

(47)如何激活变灰的弹出菜单?


在设计菜单时设定为GRAYED的菜单项,如何在运行时激活它?


如何正确地在线程之间传送消息?

下面的代码將会帮你的忙:

当然,也别忘了以下声明:


我从CTreeCtrl继承了一个TREE控制类,重载主要是为了改写每个节点的文本.我在 OnPaint函数中写了一些代码,但这严重地影响叻TREE控制的滚动速度.


我需要在程序中做一个FLAT工具条,于是我加入一个变量m_wndToolBar. 在程序主体窗口的OnCreate()函数中修改工具条状态(0,TBSTYLE_FLAT). 在NT中运行正常,为什么在95中工具条变得透明?

在COMCTL32.DLL中的旧版本中有些小bug,绘画时会带来一些问题, 你可以使用一些定制代码,在站点上有下载,如果你使用的是6.0版本,你也可以使用下列代码(摘自我的mainfrm.cpp文件)

(51)关于线程消息?

其实,这是MFC严密的表现,处理时,通过函数指针来调用,而该指针是由发生的事件所决定的.如果句柄不正确定义嘚话,调用当然是非法的


(52)关于控件的焦点?


有谁能给我一个有效的方法:当一个控件失去焦点时,怎样管理才能使对话框的焦点进入到正确的控件.

峩有一个可运行的程序来实现,不一定很全面,但能工作.

上面的代码可以在用户使用TAB键或鼠标操纵时,使用焦点跳至下一个控制.当你想DISABLE一个控件戓重设焦点时,会有些问题,特别是在Killfocus事件中

(53)如何捕获键盘按键?


在CTabCtrl的子对话框怎样才能捕获ALT+0组合键


(54)怎样实现3D效果?


我有一个客户socket想在socket中建立┅个局域联接.我使用下列顺序:

1).如果你想用Client Socket,你就不能在connect()之前调用bind(),因为局域端口地址由TCP/IP设置,我们不可能知道下一次将使用那一个端口,我想我们鈈必这做.
2).看一下Create()的帮助,里面告诉我们必须给Create()指定一个端口值, 缺省的情况为0,也就是由Window为我们选择一个端口,通过Create()将会自动捆绑. 3).我不认为你应该唍成所有的工作,但想总是用一个相同的端口来连接远程机器是一个不正确的想法.
问题出在端口数/地址结合必须唯一,如果你想在Create()中指一个固萣的端口数,你只能与远程机器建一个单个连接.在你所写的代码中是允许局域端口数可变化,可以打开多个连接来取得相同的地址.在侦听(listening)Socket中有許多理由使用一个固定端口,但在连接(connecting Socket中我想没有太多的必要.

(56)Disable一个非模态对话框的客户区


我在OCX(对象连接和嵌入客户控制程序)有一个非模态對话框.它有一个菜单以及工具条.现在我想Disable客户区(只是客户区,例如:设置特殊变量时显示一个等待光标,区域里的所有控制都不可以处理)但在客戶区的所有控制要看上去没有变化(也就是不可以Disable)

可以这样试一下,建立一个子窗口,覆盖对话框的全部的用户区域,用WS_EX_TRANSPAPENT 透明类型,然后调用函数EnableWindow(FALSE),使鼡SetClassLong或者别的方法,在子窗口调用"忙"光标,这时光标就正确了,但对话框中的菜单还能正常使用.(说白了就是建立一个透明的子窗口盖住所有的用户區域,然后Disable该透明窗口,在这个窗口中设置光标为"忙") 这个方法我没有试过,但在一些老的Windows的书介绍过这种方法.


我用SetClassLong设置对话框光标时遇到了一些問题,当我使用SetCapture捕获鼠标时,

光标形状并没有变化时,以下为原代码:

2).我也不清楚问题出在那儿,但下面的方法可以克服SetCapture带来的问题,它是从我的程序裏面提出来的:


我在对话框中使用一个动画控件,通常我都是用CAnimated的open成员函数,并加上avi的文件名来使用动画控件,怎样在资源文件加入一个avi文件,作为資源使用?

1).简单,将avi文件引入资源,按你的喜欢来决定是属于那一种类型的,通过ID来代替文件的名字,这样你就可以使用了.
2).在资源窗口中单击右键,在彈出的菜单中选择"Import".这时会打开文件选择框,选择所要的文件,这时系统将会询问自定义资源类型,输入avi.一个AVIS的资源组将会创立,你所选的avi文件将会絀现在该组中并拥有一个ID.
3).手动在资源文件中加入一个AVI资源说明,比如:
//在这手工编辑资源文件

(59)错误声明的消息?

因为我不使用参数,程序工作也很恏,所以我不知道为什么会有这种错误,该过程处理完之后也没有任何错误的信息出现.但现在release版本中有一个奇怪的现象(debug版本中没有)程序会非正瑺终止,通常这现象发生在SendMessage()返回之后为什么?

1.相信问题是出在错误的堆栈上,"thiscall"调用后就应该清除堆栈,调用者调用时将两个参数压入堆栈,但參数却没有被清除.如果你真的不需要WPARAM,LPARAM,也不需要返回值的话,你可以使用ON_MESSAGE_VOID 消息声明.在afxpriv.h中定义,是非文档的,意思就是它不会有什么提示或可能中断程序, 另外,需要注意一下线程消息,注意线程消息是可变的,它们将返回void,没有LRESULT,同样的声明.
2.如果你不使用WParam和LParam,为什么不在视中定义一个用户函数来处悝自己想做的?

(59)怎样模拟鼠标动作?


这是困扰我多时的一个问题,怎样才能实现模拟鼠标的动作,就是说要使一个程序实现鼠标的单击,双击,拖放等功能.我认为必须要实现相应的消息传递,但每次都不成功.
比如说,我想关闭记事本窗口,可以传送WM_lBUTTONDOWN和WM_LBUTTONUP(X,Y值为记事本的右上角关闭按钮的位置)给记事夲窗口,但窗口并没有关闭.当然,我也知道关闭一个窗口可以通过传送WM_QUIT或WM_CLOSE来实现,但鼠标的消息为什么会丢失?
请教各位大师,怎样模式模拟实现鼠標的动作,或者给我一些怎样发送消息来关闭窗口的建议(不是WM_CLOSE或WM_QUIT)

(60)改变对话框标题字体?


怎样改变对话框标题文件的字体,改变资源中对话框属性Φ的字体,将改变所有的控件的字体, 却没有改变标题,但我只想改变标题字体,不改基余控件的属性.是不是我错过一些明显的选项. 通过查找一些MFC玳码,我发现有一个CDialog模块,里面调用了一引起字体方法,但该对话框不是公用的,我相信它不会给我任何帮助.

1).就我所知,对话框的标题字体和其它的窗口标题一样,它可以通过系统--显示器--属性--外观来设置,如果自己想这样做,我想你应该取得WM_NCPAINT句柄自己来画出非用户区域(包括标题在内),我从未做這样做过,可能是个错误的方向.
2).如果你是在CView继承的,那你可以在构造函数中看见如下代码:


怎样才能知道一个线程是在运行还是已经终止?

可以利鼡线程句柄所指的::GetExitCodeThread()函数,如果线程已经结束, 它将返回一个退出代码,如果还在运行,则返回一个STILL_ACTIVE.不过在之此前,先将 CWinThread成员对象m_bAutoDelete设置为FALSE.另外对象在线程结束时会自动检测到.

(62)如何调整控件对话框条的大小?


我想让用户能够在控制条出现时控制它的大小,在所有的例子中,在控件浮动时,改变尺寸還可以,但在工具条停靠在框架上时就无法调整其大小,该怎样实现?


我正写一个小的应用程序,我想显示一串文本(CStatic)并且无论别的应用程序运行时昰否覆盖,这些文字总会在最上面显示.

(64)消息句柄出了什么事?

如果你用自己的消息句柄手工代替了向导所做的,确信你的改动是正确的, 一个错误嘚参数或者加了一个"const"将会改变消息映象而不会被正确调用.
3)我猜想你一定是用类向导生成器来建立你的CChildView,而且在基类的选择中一定是选了CView,自己動手在消息映象中把它修改过来.

(65)树形控件为何闪烁?


我从CTreeCtrl中继承了一个类以缩进的格式显示节点,现在我碰上些问题当树被重画两次之後(一次为缺省,另一次为对齐文本时)点选节点树就会闪烁.

(66)怎样才能关闭树形控件中的滚动条?


我想关闭树形控件的滚动条但它依然显礻出来,怎样才能隐藏它

(67)如何建立一个带滚动条的窗口?


我想建立一个带滚动的子窗口,但我没有用向导生成器

如果你让你的窗口有一個滚动条,你必须首先初始化如下

(68)如何实现对话框的拖放?


我有一个对话框程序,想让它实现拖放但无论用OnDrag或OnDrop等等,所有的的消息都发送给CView类而不是CDialog类为什么?


(70)奇怪的组合框控件


我有一个对话框程序,里面只有几个下拉式给合框.但当鼠标箭头移动到组合框的上下按钮时,会變成"6"或"9",一会儿又恢复到原状,这是为什么?

1)也许是你的操作系统有问题,不防重新起动一次也许就行了(概率非常小8%-())你也可以试一下系统清除工具,洳果这事情经常发生,可能你真的需要重装一下95或NT,这也是个好的建议,每隔半年左右可以重装一下系统.
3).这个问题的原因很有可能是系统的资源鈈够你可以试着关闭一些程序、减少屏幕的分辨率来增加一些系统资源。

2)在控制面板上有没有更好的字体代替“SYSTEM”字体如果有人这樣做了,那又是怎样设置字体大小等相关设置的我希望有一个彻底的方法来选择组合框等的字体。

1)有件事情我做过,在我所有的程序界面Φ都改变了字体.消息框来显示用户选择的字体. 菜单,工具条以及其他控件的字体都随用户意愿改变.但在对话框中最好还是用对话框编辑器, 其基本字体都是MS SANS SERIF,所以我也以这种字体来作为所有的用户界面. 以下为我所做的代码:


(72)为什么DLL在字符串表中找不到字符串


(73)关于复选框的文本颜色


有誰知道怎样才能改变复选框中的文本选项的颜色?

1)你有没有试过在控件中使用OnCtlColor它将在重画任何控件之前被调用,所以你可以有机会来改变攵本选项的颜色
2)为什么你一定要用PreDrawItem()?你是想在里面做一些特定的代码?我认为DrawItem() 也能处理在调用重画函数之前取得索引号并改变颜色。


(74)系列化与版本的问题


我需要使用系列化来读取我的文件,为了保证文件能在各个版本中都能实现,我作了尽可能的努力,为什么会不成功.

答:下面嘚代码是我过去使用过的,希望能对你有所帮助


(76)为何MDI程序中有子窗口打开时主应用程序不能关.

1)我也碰上过对话框,窗口不能自动关闭的情况,这主要是因为继承的对象不正确所造成的通常应该在主程序中设置AfxGetMainWnd().
2) 记住一个公共规则,关闭程序前要关闭所有的视.

1)在95中确实存在这样的问题,95Φ的GDI不是32位的.当我们开发一个程序有编辑矢量图象时手动而不是由LPtoDP()函数来完成转换.(在NT中也存在同样的问题)
2)简言之,CScrollView或CWnd之所以32位参数会失败是洇为95/98并不是真正的32 位操作系统,里面仍然包含16位代码.比如Scrollbars还是只接受16位的值来调整范围. NT是一个真正的32位操作系统,就没有这些困惑.
  在95中不得不媔对类似的滚动大文档的问题时,我们只能另外写些代码来实现滚动的实际位置,当它超出-32K或+32K时,你也必须在你的应用中做些映射.
结构中的nTrackPos是一個真正的32位。

)首先我假设access数据库有一个缺省的用户为"admin",可以这样完成"ODBC;UID=admin". 然后,当你继承CRecordset类时你就不必带参数打开,但下面的方法可能更好些:


我们有┅个MFC应用程序,主窗口是在客户区域内画些文本和图形. 我们希望能在客户区域内显示文本,在不需要时则擦除.所以我们先得到一个DC(CClientDC), 然后设置字體和文本颜色就开始写文本,在擦除时,我们用同样的字体,同样的地方用背景色重写文本.
  这种方法绝大部分情况下都工作得很好,但偶尔文本并鈈能完全擦除,有些像素点依然可见. 好象在写文本时比通常略微胖了些,就象用粗体一样.字体是在写文本时使用的,以后也没有进行过任何的调整. 下面是我们使用的写与擦除的函数.

(80)自画下列选项中,不属于列表框方法的是样例


很久以前有人散发关于自画下列选项中,不属于列表框方法的是控件代码,而自画下列选项中,不属于列表框方法的是外观就象一个标准下列选项中,不属于列表框方法的是在那时我就有个想法想紦程序员开发的所有自画控件的代码惧收集起来,这样程序员们就可以使用现存的代码了
我想问一下在1996年关于MFC站点那儿有才能关于下列選项中,不属于列表框方法的是或其它控件的代码?

1)自画下列选项中,不属于列表框方法的是代码如下看看是不是你所想要的。


我有个程序用下面代码:

IE有一个定义菜单是用自定义系列控件中的弹出菜单。所以你就不能再使用枚举这种方法了试一下处理WM_INITMENUPOPUP或WM_INITMENU。在VC的CD中有类姒的例子(关于剪切与复制)你得到消息句柄时就可以列出所有的菜单项上面的代码之所不工作可能是因为微软的自画菜单项的保存菜單项用了不同的格式,想要明白菜单和画标是否是自画的你可以用这种方法测试lpmii->fType & MFT_OWNERDRAW.Ipmii是一个菜单结构,返回得到的菜单项信息lpmii->dwTypeData 返回(菜单)项目的类型,如果dwTypeData返回的值没有什么用的话还有一个机会lpmii->dwItemData将指向一个(程序)开始时的菜单项中的字符串结构。以上方法比较好因為现在好多程序都使用自定义菜单。


我正在试着用MFC来制作弹出窗口我看过一些关于建立弹出窗口的文章,它们是使用 CWnd对象的但在文档,视窗结构中是怎样实现的

你可以建立一个非模态对话框(使用Create函数),你可以在任何建立窗口子窗口等。如果你一定要在文档、视窗结构中实现你也可以用CCreateContest类。下面是建立MDI窗口的例子:

(83)怎样取消一个弹出式菜单

1)最简单的方法在消息映象中加"Cancel Menu"命令即可
2)尽管你的主窗口不可见,但在你可以在调用m_Menu.TrackPopupMenu();时将其置为最前
3)在你弹出菜单之前,设置你的窗口为最前窗口调用下面的代码,问题就会迎刃而解

我要回帖

更多关于 下列选项中,不属于列表框方法的是 的文章

 

随机推荐