- 博客(22)
- 资源 (25)
- 问答 (1)
- 收藏
- 关注
原创 Windows IO处理流程浅析(IRP)
Windows操作系统中(以Windows 2000/XP为例),一个典型的I/O请求要通过一系列复杂的操作实现。 讨论Windows 系统的I/O操作的流程之前,不得不提及Windows的I/O系统结构。简单说来,从虚拟机的角度来说,Windows的I/O系统是一个层层封装的虚拟机。Windows在系统核心中,对设备进行了数层封装:直接构建在设备上的是硬件抽象层(HAL),在
2014-07-28 16:57:59 1948
原创 Windows驱动开发(二)
本节主要介绍驱动开发的一些基础知识。 1. 驱动程序的基本组成 1.1. 最经常见到的数据结构 a. DRIVER_OBJECT驱动对象[cpp] view plaincopy// WDK中对驱动对象的定义 // 每个驱动程序都会有一个唯一的驱动对象与之对应
2014-07-28 16:29:55 1589
原创 Windows驱动开发(一)
笔者学习驱动编程是从两本书入门的。它们分别是《寒江独钓——内核安全编程》和《Windows驱动开发技术详解》。两本书分别从不同的角度介绍了驱动程序的制作方法。 在我理解,驱动程序可分为两类三种: 第一类:传统型驱动 传统型驱动的特点就是所有的IRP都需要自己去处理,自己实现针对不同IRP的派发函数。其可以分为以下两种:
2014-07-28 14:08:58 1746
原创 c++中&和&&有什么区别
他们不同点在于&&相当一个开关语句,就是说如果&&前面值为false那么他就不继续执行后面的表达式;而&不管前面的值为什么,总是执行其后面的语句。&可以是取地址运算符也可以是引用符,这就看你在什么情旷下用了;而&&是逻辑与的意思如if((a = 78)&&(b = 77))它不过是个比较运算符而已。&&是boolean的逻辑运算 eg:
2014-07-23 15:09:08 15394 1
原创 树形控件CTreeCtrl的使用
树形控件在界面编程中应用十分普遍,如在资源管理器中和树形结构显示书的目录等,我们一步步研究树形控件的使用。在对话框界面上首先拖动创建一个树,一般我们改变三个属性:Has Buttons显示带有”+”或”-“的小方框,表示某项能否被展开或已展开,默认为选中,我们改为选中。Has Lines在父项与子项之间连线以清楚地显示结构,默认为选中,改为选中。Lines at root:在根部划
2014-07-22 13:30:35 1927
原创 MFC获得主窗口和父窗口指针
MFC编程中常常遇到子窗口向父窗口传递参数的情况,这就需要获得父窗口的指针。 例:主对话框CMyMainDlg通过按钮ButtonA进入对话框CMyParentDlg,CMyParentDlg在通过按钮ButtonB进入对话框CMyChildDlg。现在需要在CMyChildDlg分别访问CMyParentDlg和CMyMainDlg的内容,需要在CMyChildDlg中加入
2014-07-16 14:12:47 10893
原创 句柄和指针的区别和联系
所谓 句柄实际上是一个数据,是一个Long (整长型)的数据。句 柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。 从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样
2014-07-16 14:02:15 3922
原创 MFC获取各个窗口(体)之间的指针(对象)
MFC在很多的对话框操作中,我们经常要用到在一个对话框中调用另一个对话框的函数或变量.可以用如下方法来解决. HWND hWnd=::FindWindow(NULL,_T("Sphere")); //得到对话框的句柄 C***Dialog* pWnd= (C***Dialog*)C***Dialog::FromHandle(hWnd); //由句柄得到对话框的对象指针
2014-07-16 13:39:17 1632
原创 线程安全和线程不安全理解
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据=========================================================
2014-07-14 16:46:30 72572 11
原创 c++中指针的内存申请和内存释放问题
C++中指针在new和delete操作的时候对内存堆都做了些什么呢,以下解:1、指针的new操作:指针在new之后,会在内存堆中分配一个空间,而指针中存放的是这个空间的地址。如:void main(){ int *p = new int(4); cout cout }输出为:0x00431BF04分别为分配的空间地址和地址内存放的值。
2014-07-11 10:13:29 19404
原创 12个有趣的c面试题目
1.gets()函数问:请找出下面代码里的问题:#include int main(void) { char buff[10]; memset(buff,0,sizeof(buff)); gets(buff); printf("\n The buffer entered is [%s]\n",buff);
2014-07-10 10:38:48 1735
原创 VC中常见的108个问题
(1) 如何通过代码获得应用程序主窗口的 指针?主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现。AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED)//使程序最大化.(2) 确定应用程序的路径Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。
2014-07-10 10:32:16 2659 2
原创 DECLARE_MESSAGE_MAP用法
DECLARE_MESSAGE_MAP( ) 说明: 你的程序中的每一个CCmdTarget的派生类都可以提供一个消息映射以处理消息。在你的类声明的末尾使用DECLARE_MESSAGE_MAP宏。然后,在实现了类成员函数的.CPP文件中加入BEGIN_MESSAGE_MAP宏,再加入每个消息处理函数的宏入口,最后使用END_MESSAGE_MAP宏。 注意: 如果你在DE
2014-07-07 13:35:50 33935
原创 MFC之ComboBox控件
添加内容ComboBox_AddString(hwndCtl,lpsz)hwndCtl为此组合框的句柄,lpsz为需要添加的字符串,组合框不能直接通过id添加内容,所以需要得到这个控件的句柄,还得使用GetDlgItem()函数.举例:HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);//建立一个组合框,ID可以设置为IDC
2014-07-04 11:07:28 6750
原创 fatal error C1010: 在查找预编译头时遇到意外的文件结尾
错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?错误分析: 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include "stdafx.h")时,文件未预期结束。没有找到预编译指示信息的头文件"stdafx.h"。 (因为工程中的每个cpp文件属性默
2014-07-03 10:34:59 109768 6
原创 Invalidate、RedrawWindow与UpdateWindow的区别
一:什么时候才会发生重绘窗口的消息? 当需要更新或重新绘制窗口的外观时,应用程序就会发送WM_PAINT消息。对窗口进行重新绘制。二:Invalidate() -- RedrawWindow() -- UpdateWindow()三个函数有什么异同? Invalidate()是强制系统进行重画,但是不一定就马上进行重画。因为Invalidate()只是通
2014-07-02 13:25:51 5595
原创 WindowProc和DefWindowProc的区别
1.WindowProc是你给自己的窗口定义的窗口处理函数DefWindowProc是windows平台提供的默认窗口处理函数如果某些消息你不需要做特别的处理,调用DefWindowProc进行处理就可以了,不需要你自己再去些那些windows的"标准动作"2.根据1,显然,你只能定义WindowProc而不能定义DefWindowProc看看MFC的CWnd源码就
2014-07-02 13:06:28 2097
原创 c++双缓冲技术绘图避免闪烁
当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘图。双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样能大大加快绘图的速度。双缓冲实现过程如下:1、在内存中创建与画布一致的缓冲区2、在缓冲区画图3、将缓冲区位图拷贝到当前画布
2014-07-02 10:55:12 8044
原创 SelectObject()函数
SelectObject 把一个对象(位图、画笔、画刷等)选入指定的设备描述表。新的对象代替同一类型的老对象。HGDIOBJ SelectObject( HDC hdc, // handle to DC HGDIOBJ hgdiobj // handle to object);
2014-07-02 10:45:24 25154 1
原创 滚动条范围位置函数(SetScrollRange、SetScrollPos、GetScrollRange、GetScrollPos)
滚动条的范围是一对整数,默认情况下,滚动条的范围是0~100。SetScrollRange(hwnd,iBar,iMin,iMax,bRedraw)这里的iBar参数要么是SB_VERT,要么是SB_HORZ,iMin和iMax分别对应滚动条范围的最小值和最大值,需要Windows根据新的范围来重绘滚动条时将bRedraw设为TRUE.SetScrollPos(hwnd,iBar,
2014-07-02 10:22:33 15884
原创 IsKindOf()函数
主要检查一下对象否从某一类类派生,但此类必须从CObject派生(或间接),并且使用DECLARE_DYNAMIC/DECLARE_SEARIAL等宏比如我们函数的参数是个基类的指针类型。那么当我外部传过来一个子类的指针时,在函数内部就可以用这种语句来确认传进来的是这个子类的对象,而不是其它子类的对象ASSERT(xxx->IsKinfOf(RUNTIME_
2014-07-02 10:15:49 3131 1
原创 设置WS_EX_CLIENTEDGE窗口风格
关于该风格要注意几点的是:WS_EX_CLIENTEDGE窗口风格并不是对所有窗口都有效,只有窗口有客户区的时候才有效,这样当它用在比如button,combox,tab无客户区的控件时,它是无效的。通过对话框模版创建的控件ListCtrl,如果你指定了WS_BORDER,这时WS_BORDER将被拿掉,而WS_EX_CLIENTEDGE会被设置上。但是如果你通过create手动创建则不会
2014-07-02 08:58:22 1724 1
CString::Format函数详细介绍
2015-07-07
使用cmarkup来解析xml文件的时候,需要使用的两个文件代码
2012-08-06
change the infomation of the file
2012-08-06
guess random number
2012-08-06
电脑模拟收银系统.doc
2011-06-10
软件工程 作业后勤管理子系统设计
2011-05-06
后台线程怎么访问界面线程?c++谢谢
2015-07-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人