用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
caimouse的公告
<p> <a target=blank href=http://wpa.qq.com/msgrd?V=1&Uin=9073204&Site=blog.csdn.net/caimouse&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:9073204:1 alt="点击这里给我发消息"></a> QQ: 9073204 </p> <script type="text/javascript"><!-- google_ad_client = "pub-2983029364584304"; google_ad_width = 120; google_ad_height = 600; google_ad_format = "120x600_as"; google_ad_type = "text"; google_ad_channel = ""; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> <p> MSN: caimouse1976 at sina.com </p>
文章分类
常用连接
人生历程
存档
2009年02月09日

置顶 原创 VC++ 2008 Express的wxWidgets培训班

掌握VC++ 2008 Express开发软件。掌握Windows SDK程序设计方法。掌握wxWidgets类库在Windows平台的使用。学习跨平台的wxWidgets类库。阅读全文>

发表于 @ 2009年02月09日 23:26:00 | 评论( loading... ) | 编辑| 举报| 收藏

2008年06月16日

置顶 原创 100元的C++软件开发培训班

1、培养目标l 程序设计入门,懂得怎么使用C++编写简单程序。l 掌握程序设计方法,领会面向过程、面向对象和模板的程序设计。l 熟练地使用C++解决问题。l 每个人看懂1000个例子源码。阅读全文>

发表于 @ 2008年06月16日 23:57:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年02月09日

原创 reactos操作系统实现(196)



PALETTE_Init函数是用来创建系统调色板。具体实现如下:
#001  HPALETTE FASTCALL PALETTE_Init(VOID)
#002  {
#003      int i;
#004      HPALETTE hpalette;
#005      PLOGPALETTE palPtr;
#006  #ifndef NO_MAPPING
#007      PALOBJ *palObj;
#008  #endif
#009 

创建系统20种缺省的颜色。
#010      // create default palette (20 system colors)

分配20种颜色的调色板占用的内存空间。
#011      palPtr = ExAllocatePoolWithTag(PagedPool,
#012                           阅读全文>

发表于 @ 2010年02月09日 23:09:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年02月08日

原创 reactos操作系统实现(195)



系统调色板相关功能的代码在文件subsys/win32k/eng/palette.c里。什么是调色板呢?其实调色板就是当一种图像不是使用到所有颜色时,使用的一种索引技术,以便减少图像保存的大小。一幅图像,如果要按真彩色表达,那么就是256×256×256颜色;如果按256色表示,那就只使用到256个颜色,比起真彩色来说是少了很多空间。把一幅图像里所有包括的颜色生成一张表格,这张表格就叫做调色板。图像保存的数据时并不保存颜色的真实值,而是保存调色板里的索引值。
#001  typedef struct tagLOGPALETTE {
#002       WORD palVersion;
#003       WORD palNumEntries;
#004       PALETTEENTRY palPalEntry[1];
#005  } LOGPALETTE,*NPLOGPALETTE,*PLOGPALETTE,*LPLOGPALETTE;
这个结构,就是ROS的逻辑调色板结构定义。阅读全文>

发表于 @ 2010年02月08日 21:39:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年02月07日

原创 reactos操作系统实现(194)



GetPixel函数是从指定DC里获取指定位置的颜色值。
#001  COLORREF
#002  WINAPI
#003  GetPixel( HDC hDC, INT x, INT y )
#004  {

如果句柄不是DC,就返回非法的。
#005   if (GDI_HANDLE_GET_TYPE(hDC) != GDI_OBJECT_TYPE_DC) return CLR_INVALID;
#006   if (!GdiIsHandleValid((HGDIOBJ) hDC)) return CLR_INVALID;

调用函数NtGdiGetPixel返回指定颜色值。
#007   return NtGdiGetPixel( hDC, x, y);
#008  }阅读全文>

发表于 @ 2010年02月07日 10:35:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年02月06日

原创 reactos操作系统实现(193)



SelectObject函数是将对象选定到指定的设备场境中。具体实现代码如下:
#001  HGDIOBJ
#002  WINAPI
#003  SelectObject(HDC hDC,
#004               HGDIOBJ hGdiObj)
#005  {
#006      PDC_ATTR pDc_Attr;
#007      HGDIOBJ hOldObj = NULL;
#008      UINT uType;
#009  //    PTEB pTeb;
#010 

获取这个HDC相关的属性。
#011      if(!GdiGetHandleUserData(hDC, GDI_OBJECT_TYPE_DC, (PVOID)&pDc_Attr))
#012      {
#013           SetLastError(ERROR_INVALID_HANDLE);阅读全文>

发表于 @ 2010年02月06日 20:52:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年02月05日

原创 reactos操作系统实现(192)



NtGdiCreateBitmap函数是创建一个位图句柄。
#001  HBITMAP APIENTRY
#002  NtGdiCreateBitmap(
#003      INT Width,
#004      INT Height,
#005      UINT Planes,
#006      UINT BitsPixel,
#007      IN OPTIONAL LPBYTE pUnsafeBits)
Width是位图宽度。
Height是位图高度。
Planes是位图中颜色面的数目。
BitsPixel是标识单个像素的颜色所需的位数。
pUnsafeBits是指向由字节组成的数组的指针,该数组中包含像素数据。矩形中每条扫描线都必须字对齐。

#008  {
#009      if (pUnsafeBits)
#010      {

测试读取应用程序的数据是阅读全文>

发表于 @ 2010年02月05日 21:33:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年02月04日

原创 reactos操作系统实现(191)



CreateBitmap函数是创建具有给定宽度、高度和颜色格式的、以颜色位值构成的数组为基础的位图。
#001  HBITMAP WINAPI
#002  CreateBitmap(INT  Width,
#003               INT  Height,
#004               UINT  Planes,
#005               UINT  BitsPixel,
#006               PCVOID pUnsafeBits)
#007  {
#008      /* FIXME some part should be done in user mode */
#009      if (Width && Height)
#010      {

如果有宽度和高度,就调用内核函数NtGdiCreateBitmap来创建位图。
#011          return NtGdi阅读全文>

发表于 @ 2010年02月04日 21:23:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年02月02日

原创 reactos操作系统实现(190)


GetDC函数是通过窗口的句柄获取设备环境,这样就可以把获取到的设备环境使用到后面的GDI函数里,这样就可以在窗口的客户区中绘图了。当应用程序结束时,需要使用ReleaseDC来释放设备环境。如果是私有设备时,就可以不删除它。这个API实现函数如下:
#001  EXTINLINE HDC WINAPI
#002  GetDC(HWND hWnd)
#003  {

这里调用函数NtUserGetDC来实现相应的功能。
#004      return NtUserGetDC(hWnd);
#005  }

NtUserGetDC函数是在内核WIN32K里实现的,如下:
#001  HDC APIENTRY
#002  NtUserGetDC(HWND hWnd)
#003  {
#004   DPRINT("NtUGetDC -> %x:%x\n", hWnd, !hWnd ? DCX_CACHE | DCX_WINDOW : DCX_US阅读全文>

发表于 @ 2010年02月02日 22:43:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年01月31日

原创 reactos操作系统实现(189)



DC(device context)是一个图形对象、图形属性和影响图形输出的集合结构体。CreateDC函数用给定名称为指定的设备创建设备环境。CreateDC一般用于创建打印机的设备环境,也可以用来得到屏幕(硬件屏幕,而不是窗口的客户区)的设备环境。请小心使用这个函数,因为它允许应用程序在屏幕上任何位置绘图,而不仅仅是在窗口的边界内。请用GetDC或BeginPaint来获取屏幕窗口的设备环境。
#001  HDC
#002  WINAPI
#003  CreateDCW (
#004       LPCWSTR           lpwszDriver,
#005       LPCWSTR           lpwszDevice,
#006       LPCWSTR           lpwszOutput,
#007       CONST DEVMODEW  *lpInitData
#008       )
#009  {
#010 
阅读全文>

发表于 @ 2010年01月31日 17:36:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年01月30日

原创 reactos操作系统实现(188)



开发操作系统是一个比较复杂的程序开发,调试和测试是一个极其大的任务,工作量很大,那么有什么方法来简化测试呢?尽量把问题找出来呢?在Reactos里是编写了很多API测试程序,也就是针对某一方面的API进行全面的测试。由于Reactos里是共享了很多WINE的API代码,所以它的API测试程序就叫做winetests工程。通过编写特定的API函数来测试,可以把一个一个的API测试出来,而不会导致多API相互出现的问题,比较难找,也比较难定位出现问题的代码所在。如果一个测试程序把所有的API都调用了,那意味着就需查找300万行代码,才能解决所有问题。如果使用的测试程序只调用一个API,那就简单了,只需要查找与这个API相关的代码,就可以找到出错地方了。因此,测试程序就是针对特定API的测试,这样才能提高开发的速度,查找BUG的速度。如果没有这些测试程序是很难开发一个这么大的操作系统的。

为了测试Reactos,以及开发Reactos,那么就需要下载它的测试代码。通过下面的方式来下载代码:
1.      第一步先要安装RosBE开发阅读全文>

发表于 @ 2010年01月30日 23:46:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年01月27日

原创 reactos操作系统实现(187)



随着全球化的发展,开发软件都是面向多语言的环境。目前大多数程序都是采用不同字体来显示不同语言的办法,那么有没有一种更好的办法,一种字体就可以解决全球语言的显示呢?答案肯定的,它就是采用逻辑字体MS Shell Dlg和MS Shell Dlg2。比如开发应用程序时,就看到在资源里可以设置MS Shell Dlg和MS Shell Dlg2作为字体,并且可以设置不同的语言标识号,这样一个应用程序里就可以包括N种语言的资源,当这个应用程序运行在不同本地化设置地区时,操作系统就可以根据当前语言标识号去查找应用程序里的资源,如果找到一致的语言标识时就可以使用这种资源来显示。这时操作系统,就会使用注册表里标记为MS Shell Dlg和MS Shell Dlg2相对应的字体文件作为应用程序里的文字显示出来。ReactOS里就是使用这种方式来显示中文界面的。可以看到ReactOS注册表里如下:
70 [Font.CJK.Reg]
   71 HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersio阅读全文>

发表于 @ 2010年01月27日 21:46:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年01月24日

原创 reactos操作系统实现(186)

要调试内核代码是一件不容易的事情,一般是需要双机调试的方法,一台电脑作为目标机器来运行编译出来的操作系统,另一台电脑作为跟踪调试的机器,用来查看操作系统输出的调试信息、以及输入命令给操作系统。现在就来介绍基于虚拟机的方式来调试内核代码,最简单的方式就是使用串口通讯的方式,并且串口设置为零调制方式,也就是说只需要把数据线接收和发送交叉连续就可以了。假如在物理的电脑里有两个串口,分别命名为COM1和COM3,那么就可以在虚拟机里使用COM1作为输出串口,然后拿一条交叉的串口线把物理串口COM1和COM3连接起来,再打开串口程序并且连接串口COM3,那么就可以显示操作系统输出的信息,也可以输入命令给虚拟机操作系统了。交叉的串口线如下图所示:DTE1_______________________________________________DTE 29pol 25pol (female)__________________________25pol 9pol (female)5    7  ---GND-----阅读全文>

发表于 @ 2010年01月24日 14:44:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年01月23日

原创 reactos操作系统实现(185)



在ReactOS系统里,当安装完成后,如果网络已经可能使用,就可以立即打开应用程序管理器,直接从网络上下载相应的应用程序,这样是很方便安装和管理软件,这些都是跟Linux操作系统学习过来的。具体的界面如下:


这是ReactOS 0.3.11版本的界面,从上面看到可以下载很多非常有用的应用程序,包括最常用的网络浏览器。这一个版本改进是比较大的,很多功能已经完成,就差稳定性了。阅读全文>

发表于 @ 2010年01月23日 22:20:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年01月21日

原创  reactos操作系统实现(184)



GreExtTextOutW函数实现一串字符串输出到指定区域,当然是从字符串变成图片输出。这些都调用FreeType库来实现的,具体实现代码如下:
#001  BOOL
#002  APIENTRY
#003  GreExtTextOutW(
#004      IN HDC hDC,
#005      IN INT XStart,
#006      IN INT YStart,
#007      IN UINT fuOptions,
#008      IN OPTIONAL LPRECT lprc,
#009      IN LPWSTR String,
#010      IN INT Count,
#011      IN OPTIONAL LPINT Dx,
#012      IN DWORD dwCodePage)
#013  {
#014      /*
#015      阅读全文>

发表于 @ 2010年01月21日 21:26:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年01月20日

原创 reactos操作系统实现(183)



UserDrawCaptionText函数实现窗口上标题的显示。实现的代码如下:
#001  BOOL
#002  UserDrawCaptionText(HDC hDc,
#003     const PUNICODE_STRING Text,
#004     const LPRECT lpRc,
#005     UINT uFlags)
#006  {
#007     HFONT hOldFont = NULL, hFont = NULL;
#008     COLORREF OldTextColor;
#009     NONCLIENTMETRICSW nclm;
#010     NTSTATUS Status;
#011     #ifndef NDEBUG
#012     INT i;
#013     DPRINT("%s:", __FUNCTION__);
#014     for(i = 0; 阅读全文>

发表于 @ 2010年01月20日 23:44:00 | 评论( loading... ) | 编辑| 举报| 收藏

2010年01月18日

原创 reactos操作系统实现(182)



UserDrawCaption函数是用来实现窗口标题显示。具体代码如下:
#001  BOOL UserDrawCaption(
#002     PWINDOW_OBJECT pWnd,
#003     HDC hDc,
#004     LPCRECT lpRc,
#005     HFONT hFont,
#006     HICON hIcon,
#007     const PUNICODE_STRING str,
#008     UINT uFlags)
#009  {
#010     BOOL Ret = FALSE;
#011     HBITMAP hMemBmp = NULL, hOldBmp = NULL;
#012     HBRUSH hOldBrush = NULL;
#013     HDC hMemDc = NULL;
#014     ULONG Height;
#015  阅读全文>

发表于 @ 2010年01月18日 21:34:00 | 评论( loading... ) | 编辑| 举报| 收藏

第1页,共58页
第一页上一页下一页最后一页
Copyright © caimouse
Powered by CSDN Blog