深度理解:CTreeCtrl展开和收起消息探究
在使用树控件(CTreeCtrl)的过程中,有时候需要捕获树结点的展开(Expand)和收起(Collapse)事件并做一些自定义的操作。
今天就来探究一下树结点的展开和收起这两种消息,我们使用到了微软开发的小工具Control Spy,这个工具可以捕获Windows平台上各个控件的消息流。
TVN_ITEMEXPANDING和TVN_ITEMEXPANDED消息的触发
每当树控件展开之前,树控...
实战经验:使用ClipChildren属性减少界面闪烁
我们先做一个实验,来说明ClipChildren属性对界面绘制的影响。
新建一个基于对话框的MFC工程,我们在对话框模板的右下角,添加一个测试按钮,这个按钮代表对话框上的一个子控件。
我们分别在对话框的OnPaint和OnSize处理函数中,添加一段绘制矩形框的代码。用以模拟对话框重绘的操作。
void CClipChildrenTestDlg::OnPaint()
{
if (IsI...
深度理解:赋值与比较的性能分析
有时候,事情的结果会违反我们的经验常识。
例如,我们设置一个对象的成员值,有两种方式:一种是直接赋值,一种是先比较值是否相等,仅在不相等的情况下,才执行赋值。
日常经验会让我们觉得:第二种可能比较高效,因为在赋值之前先做了一个判断,省去了每次都赋值的成本。真的是这样吗?
我们来做一个实验,验证一下我们的想法。
#include "stdafx.h"
class CA
...
实战经验:在DLL中支持多语言
在主程序中支持多语言
在主程序中建立不同的语言资源字符串,并调用API函数SetProcessPreferredUILanguages设置当前语言就可以实现多语言特性。
在DLL中支持多语言
1) 因为DLL是主程序加载阶段载入到进程地址空间的,所以DLL中使用的语言也会受到SetProcessPreferredUILanguages函数的影响。根据这一原理,我们可以在DLL的资源中也添加各种不...
深度理解:如何返回一个CString对象
考察以下程序片段
LPCTSTR GetString1()
{
CString str(_T(""));
str.Format(_T("%s"), _T("Hello"));
return str;
}
CString GetString2()
{
CString str(_T("&quo...
实战经验:pimp技法实现面向接口编程
在大型工程中,编译时依赖会逐渐成为一个问题。每当我们修改了组件的内部实现,都影响到了组件的客户,导致客户代码重新编译,这种情况对于大型工程往往是不可接受的,微软的COM技术尝试通过接口解决此问题,但是不足之处是:COM技术依赖注册表实现组件的定位,这大大限制了组件的跨平台能力。今天,我们来讲讲pimp技法,实现轻量级的面向接口编程。
示例代码
=====================MyCo...
深度理解:#pragma once防止文件重复包含
今天的主题,做C++的朋友可能都不会太陌生。此文的目的,主要是深挖一下这个#pragma once。
示例代码
=====================MyBase.h=====================
#pragma message("Including MyClass.h")
#pragma once
class CMyBase
{
public...
实战经验:避免在组件接口中使用unsigned
示例代码
=====================MyList.h=====================
#pragma once
#include <windows.h>
class CMyList
{
public:
CMyList(void) {}
~CMyList(void) {}
public:
UINT GetSize1() c...
深度理解:类前置声明的使用
首先我们看这样一个示例程序:
=====================CX.h=====================
#pragma once
class CX
{
public:
CX(void);
~CX(void);
};
=====================CX.cpp=====================
#include "...
小技巧:解决CentOS上SSH登录慢的问题
测试环境
CentOS 7.3
问题描述
使用SSH进行远程登录,输入账号后,过了大概20秒才出现密码提示符,输入密码后,登录成功。
问题原因
1) 这里首先修改GSSAPIAuthentication为no,指明禁用GSSAPI认证方式。 GSSAPI,全称为:Generic Security Services Application Program Interface。它是由IETF制定的一个...


