[置顶] C++学习书单

关于C++的书太多了,很容易让人没有头绪。一直想整理下,把这些书列个书单出来,直到今天才动手。希望我的经验能给后来的初学者一点帮助。
1.《C++程序设计教程》 钱能
很多学校把这本书选做C++课程的教材。简单易懂,例子也很简单明了,该有的部分基本都有了。个人觉的这本书很适合入门,不知道为什么有不少人对这本书评价不是太高。但是个人意见,初学者可以从这本书入手,比《C++ primer》相对好入门点。这本书我一直带在身边,但是看的次数越来越少了,入门时候看的很多。
2.《C++ primer》
这本书的经典就不必说了。个人认为这本书兼顾了俩个方面,入门和工具书。入门读这本书,障碍也不会太大,只是书太厚,要有耐心读完。工具书,是觉的这本书可以一直放在案头,时不时的查点东西,翻点东西,很方便。个人感觉,这本书还是要翻好多遍才能烂熟于心,在次之前,这本书一直有存在手边的价值。
我本人一直把这本书带在身边,不过好在买的是正版,要不早就让我翻烂了。盗版的质量很差,很容易翻烂。
3.《The C++ Programming Language》
这本书也是C++最经典的书之一。作为学习C++的工具书来说,很好,和《C++ primer》不相上下,内容很全很权威。但是据说要比《C++ primer》更深入点,不是特别适合初学者。因为我初学的不是这本书,所以不太好评价。但是作为工具书还是相当的不错。这本书和《C++ primer》至少要有一本放在手边,遇到问题及时查阅,让人受益匪浅。尤其是当这工具书越翻越烂,而你自己的C++越来越强的时候,这本书就变成了个纪念,这种感觉不是电子书可以带来的。
4.《Effective C++》
这本书不是C++入门类书籍,也不是工具书类型,属于进阶型书籍。让你更好更高效的使用C++。这本书以原则的方式介绍了几十个原则,这些原则可以让你把C++用的更好,对C++有更深入的理解。个人强烈推荐这本书,相当值得一读。
5.《More Effective C++》
这本书可以算是《Effective C++》的续集。延续了《Effective C++》的风格,对于进阶的C++学习者来说,也是一本很不错的书。同样是以原则的方式让你更好,更高效更安全的使用C++。
6. 《数据结构》 严蔚敏
数据结构方面,只推荐这一本书,而且是C语言版的。这本书的经典就不解释了,这本书读好了之后,就不用读其他的数据结构的书了。
7. 《高质量C/C++编程指南》 林锐
这本书同样不适合初学入门者,适合进阶者。而且尤其是推荐一直在学校写程序的人工作之前好好读一读,这本书介绍了很多在实际的开发工作中需要注意的东西,很适合入职培训使用。规范大家的行为,提高大家的代码质量。另外这本书的很多题目经常被很多公司作为入职笔试题目,有准备笔试的同学也可以认真学习一下。
8. 《Head first: design patterns》
在C++进阶之后,设计模式是不可避免的要学习的内容。其中这本书可以很好的作为设计模式的初学者的入门书籍,有图画有代码,看起来还不那么费劲。建议直接读英文版,没那么难。
9.《Design Patterns: Elements of Reusable Object-Oriented Software》 四人帮
这本是设计模式的开山之作,也是奠定设计模式现状的经典书目。值得读是肯定的,但是建议不要作为入门书籍,虽然权威,但是不是特别适合初学者一上来就读。初学者读起来有点费劲,读完了可能也忘完了。
还有一部分书没介绍,就是和平台相关的内容。如果在windows下,那么《windows程序设计》以及MSDN是必不可少的资料。如果是Linux,则《UNIX环境高级编程》英文名字叫《Advanced Programming in the UNIX Environment》是必不可少的学习资料。
基本上读过的C++的书就这么多了,还有些读完了就忘记了,这里就不提了。在这里列出来的书,大部分都是读了很多遍。也有一些好的书,一直打算读,一直还没读。回头整理一个打算读的书单列出来。

 

<think>好的,我现在需要帮助用户解决如何在C++中实现窗口置顶功能的问题。根据用户提供的引用资料,特别是引用[2],里面提到使用SetWindowPos函数,并且有一个示例代码。我应该先确认这个方法是否正确,并考虑是否有其他方法。 首先,用户提到的SetWindowPos函数是Windows API的一部分,用来改变窗口的位置、大小和Z序。参数&wndTopMost可能是指将窗口置于最顶层,但实际在Windows API中,应该使用HWND_TOPMOST作为第一个参数,这样窗口会保持在所有非最顶层窗口之上。不过引用[2]中的代码可能使用了某个框架的特定变量,比如MFC中的wndTopMost,但需要进一步确认。 另外,用户提供的示例代码是放在OnInitDialog()函数中,这可能意味着在MFC应用程序中使用。因此,我需要确保给出的示例代码适用于MFC或者纯Win32 API的情况。可能需要分别说明这两种情况,或者确认用户的环境。 另一个可能的函数是SetWindowLong,用于设置窗口的扩展样式,例如添加WS_EX_TOPMOST属性。但更常见和推荐的方法是使用SetWindowPos,因为这样可以即时更新窗口的位置和状态,而不需要额外的操作。 用户提供的引用[3]中提到了FindWindow函数,这可能查找窗口句柄有关,但当前的问题是关于置顶自己的窗口,所以可能不需要用到FindWindow,除非需要操作其他窗口。因此,主要关注点应该在SetWindowPos的使用上。 接下来,我需要验证示例代码的正确性。引用[2]中的代码是: SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); 在MFC中,CWnd类的SetWindowPos函数的第一个参数是Z序的窗口句柄。wndTopMost可能是一个预定义的成员变量,代表HWND_TOPMOST。但正确的参数应该是HWND_TOPMOST,即( HWND )-1。因此,在MFC中,正确的调用应该是: SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); 或者更直接地使用: SetWindowPos(HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); 不过需要确认MFC中的wndTopMost是否已经正确映射到HWND_TOPMOST。可能用户提供的代码是正确的,因为在MFC中,CWnd::wndTopMost是一个静态成员,对应HWND_TOPMOST。 另外,在纯Win32 API中,正确的调用应该是: ::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); 这里的hWnd是要置顶的窗口的句柄。因此,我需要分情况讨论,一种是使用MFC框架,另一种是使用纯Win32 API的情况。 用户的问题是关于C++的实现,所以可能两种情况都需要涵盖。示例代码可能包括MFC和非MFC的情况,但需要明确说明。 总结下来,实现窗口置顶的方法主要是通过SetWindowPos函数,将窗口的Z序设置为HWND_TOPMOST,并设置适当的标志位来保持位置和大小不变。同时,如果要取消置顶,可以使用HWND_NOTOPMOST。 现在需要将这些整理成步骤,并给出示例代码,同时确保引用的正确性。需要注意用户提供的引用[2]中的代码是否正确,可能需要指出在MFC中的使用方式,并补充纯Win32 API的示例。 最后,生成相关问题,比如如何取消置顶,或者在不同框架中的实现差异等。</think>在C++中实现窗口置顶功能主要依赖Windows API的$SetWindowPos$函数,通过调整窗口的Z序实现。以下是两种常见实现方式: ### 方法一:使用纯Win32 API ```cpp // 获取当前窗口句柄(假设hWnd已定义) ::SetWindowPos( hWnd, // 目标窗口句柄 HWND_TOPMOST, // 置顶标识 0, 0, 0, 0, // 忽略位置和大小参数 SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE // 保持原位置和大小 ); ``` ### 方法二:在MFC框架中实现 ```cpp // 在对话框类成员函数(如OnInitDialog)中调用: this->SetWindowPos( &CWnd::wndTopMost, // MFC预定义的置顶标识[^2] 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE ); ``` ### 取消置顶 ```cpp // Win32 API ::SetWindowPos(hWnd, HWND_NOTOPMOST, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE); // MFC SetWindowPos(&CWnd::wndNoTopMost, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE); ``` ### 关键参数说明 - `HWND_TOPMOST`:窗口置于所有非顶层窗口之上 - `SWP_NOMOVE`:保持当前窗口位置 - `SWP_NOSIZE`:保持当前窗口尺寸 - `SWP_NOACTIVATE`:不激活窗口(可选)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值