百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

在学习C++的过程中你有遇到这些问题么?如果有,那你可以看看

liebian365 2024-10-24 14:35 31 浏览 0 评论

对这方面感兴趣或者想学习C/C++的可以加群:558502932,群内有很多C/C++学习资料,大家一起学习交流。

问题1:在消息WM_ENABLE中用“GetDlgItem(IDC_BUTTON)->EnableWindow(FALSE);”语句来Disable一个ID_BUTTON按钮时,却没有发生变化,这是为什么?

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

pWnd->EnableWindow(TRUE);

Disable一个对象可用

pWnd->EnableWindow(FALSE);

其中,pWnd为一个指向窗口对象的指针(这里是指向按钮的指针),该问题关键在于VC中消息WM_ENABLE告诉窗口它正在Disable或Enable,但它并不能使一个窗口Enable或Disable。

问题2:如何才能将最近使用过的几个文件名(包含路径)显示出来?

答:你不需要建立一个CRecentFileList类,它已经由CWinApp基类完成了。你只需在

initinstance中调用LoadStdProfileSettings()函数就可以了。CRecentFileList类中有一个CWinApp保护成员变量(如m_pRecentFileList),所以你应该在你的继承类中处理它。

void CMdiApp::OnFileMruFile1()

{ // TODO: Add your command handler code here

CString vl_name ;

ASSERT( m_pRecentFileList->GetSize() > 0);

vl_name = (*m_pRecentFileList)[0];

CWinApp::OnOpenRecentFile(ID_FILE_MRU_FILE1);

}

问题3:在设计浮动菜单时设定为GRAYED的菜单项,如何在运行时激活它?

答:只要在适当的时候调用EnableMenuItem函数就可以了。EnableMenuItem函数带有两个参数,一个是需要改变的菜单项的ID,而第二个参数则是通知函数应采取的动作,可以用MF_ENABLE或MF_GRAYED。

void CMyView::OnRButtonDown(UINT nFlags, CPoint point)

{CScrollView::OnRButtonDown(nFlags, point);

CMenu *menu, *popup;

menu = new CMenu();

// load menu from resource file

menu->LoadMenu( IDR_POPUPMENU );

popup = menu->GetSubMenu(0); // item 0 is DUMMY

UINT nEnable;

nEnable = MF_BYCOMMAND|MF_GRAYED;

if( your test )

{nEnable = MF_BYCOMMAND|MF_ENABLED;}

popup->EnableMenuItem( ID_YOUR_ID, nEnable );

//display menu

ClientToScreen(&point);

popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_R IGHTBUTTON,point.x, point.y,

this );

delete menu;}

其中your test为判断条件,根据具体情况来改成相应的条件。

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

答:方法一:请试用下面的一段代码:

DAODBEngine* pDBEngine = AfxDaoGetEngine();

ASSERT(pDBEngine != NULL);

COleVariant varUserName (strUserName, VT_BSTRT);

COleVariant varPassword (strPassword, VT_BSTRT);

DAO_CHECK(pDBEngine->put_DefaultUser (V_BSTR(&varUserName));

DAO_CHECK(pDBEngine->put_DefaultPassword (V_BSTR(&varPassword));

方法二:使用CDaoDatabase的Open方法:

MyDaoDatabase->Open(″C:\MyDatabaseFile.mdb″,FALSE,FALSE,″;PWD=MyPassWord″);

注意,请别忘了“;PWD=MyPassWord”前面的“;”号。

问题5:我想让调用的函数和被调用的函数属于同一个类,结果在调用CreateThread时出现如下错误:

error C2440: ′type cast′ : cannot convert from ′unsigned long (__stdcall

Cdmi::*)(void *)′ to ′unsigned long (__stdcall *)(void *)′

答:一、unsigned long (__stdcall Cdmi::*)(void *)是指向Cdmi某个成员函数的指针。

二、unsigned long (__stdcall *)(void *)仅仅是一个C形式函数的指针。

编译器无法将一转换为二是因为C++成员函数取第一个(隐藏)参数″this pointer″

作为成员函数,但作为静态成员时则例外。可按如下方法解决:

class XMyThread

{public:

void StartThread(void);

virtual UINT ThreadFunction(void);

static UINT __bogusthreadfunc(LPVOID lpparam);};

void XMyThread::StartThread()

{AfxBeginThread(__bogusthreadfunc,this);}

UINT XMyThread::ThreadFunction(void)

{//here you do all your real work

return 0;}

UINT XMyThread::__bogusthreadfunc(LPVOID lpparam)

{XMyThread* This = dynamic_cast(lpparam);

return This->ThreadFunction();}

由于版面有限,我们没有加入停止线程的代码。如果需要,可以继承XMyThread,并重写ThreadFunction()函数,如:

class XAnotherThread : public XMyThread

{virtual UINT ThreadFunction(void);};

UINT XAnotherThread :: ThreadFunction(void)

{//do some other work here

return 0;}

问题6:我将一个16x16的图标用在CListCtrl中时,发现它需要一个HICON句柄,请问我怎样才能从图标的ID中获取句柄?

答: 用以下的方法可以取得图标的句柄

HICON hIcon = NULL;

hIcon = LoadIcon(IDI_YOURICONID);

问题7:我已经调用了SetModifiedFlag()方法,但为什么在用户关闭文档窗口时仍然没有方法得知,如果我等到OnCloseDocument()时已经晚了,虽然我设置了标志,但它在改变时依然没有任何提示,请问这是为什么?

答:1)时刻检查用户的状态,只要用户有所变动就马上调用SetModifiedFlag()函数,并且多次调用完全没有性能上的问题。不要等到开始关闭时才调用SetModifiedFlag()。

2)当用户文档进行了改动时,在视类中调用“GetDocument()->SetModifiedFlag(TRUE)”。例如,如果在视中有一个CEdit控件,加入一个对消息ON_EN_CHANGE的自定义函数(假设为OnEditChange()),在这个函数里你就可以调用SetModifiedFlag()。

现在无论用户什么时候关闭计算机都可以询问是否保存。

问题8:打印程序中如何定义一页纸的区域,即无论如何画线,都不超出此区域?

答:在OnDraw中获得打印页面的范围,然后在该范围中画线。

void CView::OnDraw(CDC* pDC)

{ if(pDC->IsPrinting()!=0)

{ int cxPage = pDC->GetDeviceCaps(HORZRES);//获取打印页面范围

int cyPage = pDC->GetDeviceCaps(VERTRES);//get printer pixels per inch

int cxInch = pDC->GetDeviceCaps(LOGPIXELSX);

int cyInch = pDC->GetDeviceCaps(LOGPIXELSY);

...}}

问题9:在VC6(非MFC)中,我想实现将Ctrl+Alt+Del、Ctrl+Esc、Alt+Tab等功能组合键锁住,请问怎样使用Windows

API函数实现?

答:在VC6如果需要将功能组合键锁住,只需调用API函数SystemParametersInfo即可,使用如下:SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,

TRUE, NULL, 0)。

问题10:我通过产生的一组随机数,在视中显示波形图。我采用了CRECT计算出视的失效区,并采用UPDATEWINDOW函数刷新视。程序进入死循环(呈现的波形正常),但我设置的SETTIMER(1,256,NULL)却没有起作用,请问这是为什么?

答:你可能在编写程序强制执行死循环,并且在死循环里没有加入消息处理机制,SetTimer发的WM_TIMER消息不能执行。因为在执行死循环时系统处于等待状态,解决这个问题的方法是:在循环中加入下面的语句

if (PeekMessage()) { TranslateMessage(); DispatchMessage() };

问题11:请问如何实现在移动窗口时,显示的是窗口而非虚框?

答:在Windows系统中,需要在移动窗口时显示窗口或虚框,可以调用Windows API函数来实现:

SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, TRUE, NULL, 0)。

希望这篇文章能对你们有所帮助,如果有什么需要补充的,希望可以在评论区多多指出。

想学习C/C++的可以加群:558502932,群内有大量C/C++学习资料,大家一起学习交流。

相关推荐

精品博文嵌入式6410中蓝牙的使用

BluetoothUSB适配器拥有一个BluetoothCSR芯片组,并使用USB传输器来传输HCI数据分组。因此,LinuxUSB层、BlueZUSB传输器驱动程序以及B...

win10跟这台计算机连接的前一个usb设备工作不正常怎么办?

前几天小编闲来无事就跑到网站底下查看粉丝朋友给小编我留言询问的问题,还真的就给小编看到一个问题,那就是win10跟这台计算机连接的一个usb设备运行不正常怎么办,其实这个问题的解决方法时十分简单的,接...

制作成本上千元的键盘,厉害在哪?

这是稚晖君亲自写的开源资料!下方超长超详细教程预警!!全文导航:项目简介、项目原理说明、硬件说明、软件说明项目简介瀚文智能键盘是一把我为自己设计的——多功能、模块化机械键盘。键盘使用模块化设计。左侧的...

E-Marker芯片,USB数据线的“性能中枢”?

根据线缆行业的研究数据,在2019年搭载Type-C接口的设备出货量已达到20亿台,其中80%的笔记本电脑和台式电脑采用Type-C接口,50%的智能手机和平板电脑也使用Type-C接口。我们都知道,...

ZQWL-USBCANFD二次开发通讯协议V1.04

修订历史:1.功能介绍1.1型号说明本文档适用以下型号:  ZQWL-CAN(FD)系列产品,USB通讯采用CDC类实现,可以在PC机上虚拟出一个串口,串口参数N,8,1格式,波特率可以根据需要设置(...

win10系统无法识别usb设备怎么办(win10不能识别usb)

从驱动入手,那么win10系统无法识别usb设备怎么办呢?今天就为大家分享win10系统无法识别usb设备的解决方法。1、右键选择设备管理器,如图:  2、点击更新驱动程序,如图:  3、选择浏览...

微软七月Win8.1可选补丁有内涵,含大量修复

IT之家(www.ithome.com):微软七月Win8.1可选补丁有内涵,含大量修复昨日,微软如期为Win7、Win8.1发布7月份安全更新,累计为6枚安全补丁,分别修复总计29枚安全漏洞,其中2...

如何从零开始做一个 USB 键盘?(怎么制作usb)

分两种情况:1、做一个真正的USB键盘,这种设计基本上不涉及大量的软件编码。2、做一个模拟的USB键盘,实际上可以没有按键功能,这种的需要考虑大量的软件编码,实际上是一个单片机。第一种设计:买现成的U...

电脑识别U盘失败?5个实用小技巧,让你轻松搞定USB识别难题

电脑识别U盘失败?5个实用小技巧,让你轻松搞定USB识别难题注意:有些方法会清除USB设备里的数据,请谨慎操作,如果不想丢失数据,可以先连接到其他电脑,看能否将数据复制出来,或者用一些数据恢复软件去扫...

未知usb设备设备描述符请求失败怎么解决

出现未知daousb设备设备描述符请求失du败解决办zhi法如下:1、按下Windows+R打开【运行】;2、在版本运行的权限输入框中输入:services.msc按下回车键打开【服务】;2、在服务...

读《飘》47章20(飘每章概括)

AndAhwouldn'tleaveMissEllen'sgrandchildrenfornotrashystep-patobringup,never.Here,Ah...

英翻中 消失的过去 37(消失的英文怎么说?)

翻译(三十七):消失的过去/茱迪o皮考特VanishingActs/JodiPicoult”我能做什么?“直到听到了狄利亚轻柔的声音,我才意识到她已经在厨房里站了好一会儿了。当她说话的时候,...

RabbitMQ 延迟消息实战(rabbitmq如何保证消息不被重复消费)

现实生活中有一些场景需要延迟或在特定时间发送消息,例如智能热水器需要30分钟后打开,未支付的订单或发送短信、电子邮件和推送通知下午2:00开始的促销活动。RabbitMQ本身没有直接支持延迟...

Java对象拷贝原理剖析及最佳实践(java对象拷贝方法)

作者:宁海翔1前言对象拷贝,是我们在开发过程中,绕不开的过程,既存在于Po、Dto、Do、Vo各个表现层数据的转换,也存在于系统交互如序列化、反序列化。Java对象拷贝分为深拷贝和浅拷贝,目前常用的...

如何将 Qt 3D 渲染与 Qt Quick 2D 元素结合创建太阳系行星元素?

Qt组件推荐:QtitanRibbon:遵循MicrosoftRibbonUIParadigmforQt技术的RibbonUI组件,致力于为Windows、Linux和MacOSX提...

取消回复欢迎 发表评论: