07 2007 档案

摘要:如何让整个窗口具有透明效果呢? 使用如下的类:// class CLayeredImpl// Layered Windowtemplate <class T>class ATL_NO_VTABLE CLayeredImpl{public: HMODULE m_hUser32LWA; CLayeredImpl() { } virtual ~CLayeredImpl() { } LONG SetLayeredStyle() { T* pT = static_cast<T*>(this); ATLASSERT(::IsWindow(pT->m_hWnd)); LONG 阅读全文
posted @ 2007-07-25 15:35 反正我信了 阅读(242) 评论(0) 推荐(0)
摘要:如何改变窗口的背景色,但是不影响OnPaint函数内部的绘图逻辑呢?举例:LRESULT OnEraseBackground(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) { // handled, no background painting needed CPaintDC dc(m_hWnd); RECT rect; GetClientRect(&rect); CBrush brush; brush.CreateSolidBrush(RGB(255,134,255)); dc.Fil 阅读全文
posted @ 2007-07-25 15:33 反正我信了 阅读(309) 评论(0) 推荐(0)
摘要:Form窗口实际上就是派生自对话框类CDialogImpl类。因为也有一个对话框资源,所以我们可以使用可视化编辑的方式添加控件。class CFormView : public CDialogImpl<CFormView>{public: enum { IDD = IDD_FORM_FORM }; BOOL PreTranslateMessage(MSG* pMsg) { return CWindow::IsDialogMessage(pMsg); } BEGIN_MSG_MAP(CFormView) END_MSG_MAP()}; 注意当手动添加对话框资源时,需要将Border属 阅读全文
posted @ 2007-07-25 15:30 反正我信了 阅读(295) 评论(1) 推荐(0)
摘要:下面是我通过使用向导生成的代码:class CDemoView : public CWindowImpl<CDemoView, CTreeViewCtrl>{public: DECLARE_WND_SUPERCLASS(NULL, CTreeViewCtrl::GetWndClassName()) BOOL PreTranslateMessage(MSG* pMsg) { pMsg; return FALSE; } BEGIN_MSG_MAP(CDemoView) END_MSG_MAP()}; 注意和普通窗口的区别:1)CWindowImpl第二个木板参数为CTreeViewCt 阅读全文
posted @ 2007-07-18 14:47 反正我信了 阅读(166) 评论(0) 推荐(0)
摘要:WTL提供了3个类用来分隔窗口:CSplitterImpl、CSplitterWindowImpl、CSplitterWindowT。CSplitterImpl类实现了最主要的分割窗口所需要的函数。CSplitterWindowImpl继承了CSplitterImpl类,它实现了一个什么都不做的OnEraseBackground函数,还实现了一个OnSize函数,该函数可以自动调整分割窗口的客户区大小。通常情况下,我们可以直接使用CSplitterWindowImpl类作为我们窗口的父类,如果这两个函数的行为达不到我们的要求,我们可以改写继承自CSplitterImpl类的消息处理函数。CSp 阅读全文
posted @ 2007-07-18 14:23 反正我信了 阅读(357) 评论(0) 推荐(0)
摘要:Windows下,每个线程都可以拥有一个消息队列,通常UI线程默认就拥有自己的消息队列,Work Thread需要自己调用PeekMessage来创建自己的消息队列。 消息是一个数据结构,下面是它的定义:typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt;#ifdef _MAC DWORD lPrivate;#endif} MSG 每个消息都包含了要接收消息的窗口的句柄,消息ID,两个参数,还有其他信息。SDK下的消息循环通常这样写:while . 阅读全文
posted @ 2007-07-18 14:16 反正我信了 阅读(262) 评论(0) 推荐(0)
摘要:点击这里下载插件,将插件放到/usr/lib/audacious/General文件中即可。在 Fedora 7中试验通过。目前仅支持本地歌词文件,歌词文件名和歌曲名相同,后缀为lrc,文件编码格式支持UTF-8和GB2312 阅读全文
posted @ 2007-07-18 09:29 反正我信了 阅读(504) 评论(0) 推荐(0)
摘要:算法排序算法Selection Sort 连续的容器中存放了很多的元素,我们需要对其进行排序,假设每个元素都支持operator <运算符。 选择排序的做法是先选择第一个元素,然后和其他的n-1个元素逐一比较,找到n-1个当中最小的,并且同时小于第一个元素的,交换位置。 然后用同样的算法考虑后面的n-1、n-2、n-3...个元素,直到还剩下最后一个元素。template<typename T>void SelectionSort(T a[],size_t length) { assert(length>1); size_t curPos=0,minPo... 阅读全文
posted @ 2007-07-17 14:44 反正我信了 阅读(219) 评论(0) 推荐(0)
摘要:该程序将演示如何将一个简单结构序列化后发送到网络上,如何从网络上接收到数据后反序列化回结构。 ACE的C++ WRAPPER FACADE层将网络通信分成三种角色:连接者(ACE_SOCK_Connector)、等待者(ACE_SOCK_Acceptor)和传输者(ACE_SOCK_Stream)。建立连接 首先使用ACE_SOCK_Connector::connect连接某个服务器(使用ip地址和端口号),该服务器上使用ACE_SOCK_Acceptor::accept等待外部的连接请求。ACE_INET_Addr类进行管理SOCKET通信使用的IP地址和端口号。当... 阅读全文
posted @ 2007-07-17 14:43 反正我信了 阅读(550) 评论(0) 推荐(0)
摘要:Linux编程环境时间日期类型timeval 及其相关API “时间”和“日期”的概念,主要有以下几个: Coordinated Universal Time(UTC):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。 Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该... 阅读全文
posted @ 2007-07-17 14:41 反正我信了 阅读(224) 评论(0) 推荐(0)
摘要:性能优化Linux下程序性能分析工具gprof gprof 安装在Linux 系统的 /usr/bin 目录下. 它能剖析你的程序,并分析出程序的哪一个部分在执行时最费时间. gprof 将告诉你程序里每个函数被调用的次数和每个函数执行时所占时间的百分比. 你如 果想提高你的程序性能的话这些信息非常有用. 为了在你的程序上使用 gprof, 你必须在编译程序时加上 -pg 选项. 这将使程序在每次 执行时产生一个叫 gmon.out 的文件. gprof 用这个文件产生剖析信息.在你运行了你的程序并产生了 gmon.out 文件后你能用下面的命令获得剖析... 阅读全文
posted @ 2007-07-17 14:40 反正我信了 阅读(220) 评论(0) 推荐(0)
摘要:多线程信号驱动I/0和异步I/0的区别 信号驱动I/0是指进程预先告知内核,使得当某个描述字上发生某事时,内核使用信号通知相关进程。 异步I/0是进程执行I/0系统调用(比如读或者写),内核启动I/0操作后立刻返回进程,进程可以在I/0操作执行期间继续处理别的事情,然后当I/0操作成功或者失败时,内核以进程预先设定的方式通知进程。使用锁保护同步数据的原则 多个线程使用同一个数据,必须保护该数据; 如果多个线程共用一个基础类型变量,应该声明为volatile,防止编译器使用将其缓存到寄存器内的优化方式; 共享的整数变量应该优先使用原子操作来修改其值; 有时候,... 阅读全文
posted @ 2007-07-17 14:39 反正我信了 阅读(233) 评论(0) 推荐(0)
摘要:Function Objects 函数对象的定义:可以使用函数调用语法进行调用的任何对象。 如果一个类或者结构A实现了ResultType operator()(Parameters)方法(即重载了函数调用操作符),当客户编写代码如A()时,其实就是通过默认构造函数创建了A的对象,然后调用上面的这个operator()方法。 函数对象拥有几个优点:1)因为函数对象可以有成员变量,因此可以在构造函数中初始化成员变量,因此与一般函数相比,函数对象拥有状态。这主要带来的是灵活性。 比如函数Func接受一个函数对象的引用A,然后调用A(),客户可以预先创建不同的函数... 阅读全文
posted @ 2007-07-17 14:38 反正我信了 阅读(173) 评论(0) 推荐(0)
摘要:STL容器顺序容器 顺序容器将单一类型的元素聚集起来,然后根据位置来存储和访问这些元素。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。 STL中最常用的顺序容器是vector、list、deque。在这里,我不打算介绍如何使用这些容器类的基本函数,这将作为课后作业。我把篇幅放在如何选择使用这三种容器上。vector<> vector被称为动态数组,原始的静态数组一旦越界可能会悄无声息的修改掉不该修改的内存,而vector会立即出错,抛出异常。vector具备动态增长的能力,如果空间不够,vector会创建一块更大的连续空间,然后将原来... 阅读全文
posted @ 2007-07-17 14:37 反正我信了 阅读(203) 评论(0) 推荐(0)
摘要:基本知识程序做错误检查是必要的,通常我们可以通过返回值告诉客户有了错误,不过异常提供了更加方便的手段和丰富的信息。当某处程序发现了错误,可以选择自己处理或者交给外部调用者处理,比如:void Func(char* p){if(p==NULL){throw std::invalid_argument(“p is NULL”);}}而调用者可以选择拦截该异常对象或者放过,交由更外层的逻辑处理。try{Func(NULL);}catch(std::invalid_argument const& e){cout<<e.what()<<endl;throw;}这个例子中, 阅读全文
posted @ 2007-07-17 14:36 反正我信了 阅读(196) 评论(0) 推荐(0)
摘要:智能指针类auto_ptr 98 C++标准只规定了一个智能指针,就是template <class Type>class auto_ptr 下面是示例代码:#include <memory>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ auto_ptr<string> spString(new string("hello,world")); size_t length=spString->length(); return 0;} 模板参数Type是auto_pt 阅读全文
posted @ 2007-07-17 14:34 反正我信了 阅读(411) 评论(0) 推荐(0)