没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
80386 三种工作模式。事实,保护,虚拟模式。保护模式是 80386 的主
要工作模式。(保护主要针对存储器的保护)
Windows 多任务的实现。
80386 多任务操作系统的支持性主要体现在两个方面:
1, 在硬件上为任务之间的切换提供了良好的条件;
2, 它实现了多任务隔离,多任务隔离可以使每个任务都有独立的地址
空间,就像每个任务都独享一个 cpu 一样。
在 windows 下任务被进程取代。进程是正在运行程序的实例。但是
占有 cpu 时间片执行指令的并不是进程,而是线程,线程是进程内代
码的执行单元。
Windows 为每个进程分配 4GB 的地址空间主要依靠 cpu 的支持。Cpu
在保护模式下支持虚拟存储。他可以帮助操作系统将磁盘空间当做内
存空间来使用。在磁盘上使用这一机制的文件称作为页文件,它包含
了对所有进程都有效的虚拟内存。
各进程的地址空间分为 用户空间和系统空间。
内核模式和用户模式
80386 处理器定义了 4 种(0~3)特权级别,或者成为环,其中 0 级是
最高级(特权级)别,3 级是最低级(用户级)。
为了阻止应用程序访问或者修改关键的系统数据(即 2GB 系统空间内的
数据)windows 提供了两种访问模式:内核模式和用户模式,它们分别使用
了处理器中的 0 和 3 这两个特权级别。用户程序的代码在用户模式下运行,
系统程序(如系统服务程序和硬件驱动)的代码在内核模式下运行。
虽然系统中的每个进程都有自己的 4GB 私有地址空间。但是内核模式下
的系统和设备驱动程序公用一块虚拟地址空间。
内核对象是系统提供的用户模式下代码与内核模式下代码进行交互的基
本接口。 一个内核对象是一块内核分配的内存,它只能被运行在内核模式
下的代码访问。内核对象记录的数据在整个系统中只有一份,所以它们称为
系统资源。
PcGuard
1. 动画窗口的实现 新键类 class COpenScreenWnd : public CWnd
CDC m_MemDC; // 创建内存 DC
BITMAP m_bm; // 创建位图结构变量
CBitmap m_bitmap; // 创建位图对象
CBitmap *old_bitmap; // 创建位图对象指针
void CreatScreenWnd(); // 创建窗口
afx_msg void OnPaint(); // 重载此函数
实现部分:
在构造函数中
m_bitmap.LoadBitmap(IDB_BITMAP1);// 拷贝资源位图
m_bitmap.GetBitmap(&m_bm);// 得到位图结构中的大小信息
void COpenScreenWnd::CreatScreenWnd()中创建窗口
//建立大小与位图大小相同的窗口
CreateEx(0,AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_A
RROW)),
"ImageScreen",
WS_POPUP,
0,
0,
m_bm.bmWidth,
m_bm.bmHeight,
NULL,
NULL,
NULL );
在 void COpenScreenWnd::OnPaint()中绘制动画
m_MemDC.CreateCompatibleDC(NULL);// 建立一个和 dc 兼容的内存 DC
放置位图
old_bitmap=m_MemDC.SelectObject(&m_bitmap);// 将创建的位图选入内存
DC
int i,j,stepx,stepy,dispnum,x,y;
int bit_Arry[20][20]; // 数组记录已显示过的数据组
for ( i=0; i<20; i++ )
for ( j=0; j<20; j++ )
bit_Arry[i][j]=0;
stepx=m_bm.bmWidth/20;
stepy=m_bm.bmHeight/20;
srand( (unsigned)time( NULL ) );
dispnum=0;
//记录已显示过的数据组的个数
while(true)
{
x=rand() % 20;
y=rand() % 20;
if ( bit_Arry[x][y] ) //如果为 1,则已经显示了,跳出循环。
continue;
bit_Arry[x][y]=1; //显示,设置为 1
//将源矩形中的位图拷贝到目标矩形中,如果有必要,可以扩展或压缩该位图
//使其与目标矩形尺寸吻合
// strechblt 输出的图总是完整的,而且充满你指定的目标 DC 区域,而 bitblt 则可能输出的
图是不完整的,也可能无法充满目标 dc 制定区域。
dc.StretchBlt( x*stepx, y*stepy, //目标设备逻辑横、纵坐标
stepx,stepy, //显示位图的像素宽、高度
&m_MemDC, // 位图内存设备对象
x*stepx, y*stepy, // 位图的起始横、纵坐标
stepx,stepy, // 位图的像素宽、高度
SRCCOPY); // 将源矩形区域直接拷贝到目标矩形区域
dispnum++;
if ( dispnum >=400 ) // 判断显示完背景图吗
break; // 跳出循环
Sleep(10);
}// while
Sleep(200);// 暂停 200 毫秒
m_MemDC.SelectObject(old_bitmap); // 还原 DC
2. 超链接的实现
在类中添加变量
//用于保存超链接静态文本框的屏幕坐标
RECT m_pRectLink;
并且添加 鼠标事件
ON_WM_MOUSEMOVE()
void CPcGuardDlg::OnMouseMove(UINT nFlags, CPoint point)
添加 ON_WM_LBUTTONDOWN()
// 鼠标左单击消息
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
分别在实现中添加代码如下:
OnMouseMove(UINT nFlags, CPoint point)
//下面设置鼠标在静态文本区时,将光标设成小手状
if (point.x > m_pRectLink.left && point.x < m_pRectLink.right &&
point.y > m_pRectLink.top && point.y < m_pRectLink.bottom )
//此处添加判断坐标算法
{
HCURSOR hCursor;
hCursor = AfxGetApp()->LoadStandardCursor(IDC_HAND);
//将鼠标设为小手状
SetCursor(hCursor);
}
OnLButtonDown(UINT nFlags, CPoint point)
//此处添加判断坐标算法
if (point.x > m_pRectLink.left && point.x < m_pRectLink.right && point.y >
m_pRectLink.top && point.y < m_pRectLink.bottom)
{
//鼠标左键按下
if (nFlags == MK_LBUTTON)
{
//为改善鼠标效果,此处加入以上变换鼠标形状的代码
ShellExecute(0, NULL, "http://blog.csdn.net/gfsfg8545", NULL,NULL,
SW_NORMAL);
}
}
FileMonitor
三种方法:
调用 Windows 的 api 函数 ReadDirectoryChanges 监视指定目录中文件(推
荐使用),这个使用异步 IO:
或者用 SHChangeNotifyRegister 和 SHChangeNotifyDeregister 来注册
事件 SHChangeNotify:
或者调用 API 函数-FindFirstChangeNotification 、FindCloseChangeNotification、
FindNextChangeNotification 和 WaitForSingleObject :
1. //创建文件,打开目录,得到目录句柄 (在监视线程中打开)
CreateFile
定义 FILE_NOTIFY_INFORMATION
ReadDirectoryChangesW ()在这里设置监控属性和接受监控结果 W 代表它是 Unicode 版本
在对监控的文件夹同时删除、移入多个文件时,这个函数不能返回所有删除或移入的文件的信息,比如,对于监控的文件
夹,同时 选中多个文件,十个以上,执行删除,时这个函数返回的变更数据就不完整了(注:我设置的接收数据缓冲区大小为
4KB,一般的情况是够用了,不至于缓冲区太小而不能容纳文件变更数据)
写入配置信息
剩余20页未读,继续阅读
马克love
- 粉丝: 32
- 资源: 319
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0