
Windows编程学习
文章平均质量分 58
l0g1n
这个作者很懒,什么都没留下…
展开
-
内存管理
采用基于页面映射的“虚拟内存”机制,或者说提供“页式内存管理”。在硬件上,这是由CPU芯片内部(或外部)的“存储管理单元”MMU支持。在软件上,则由操作系统内核中的内存管理模块实现。广义的“内存管理”指一切与内存有关的管理,包括缓冲区的分配与释放。狭义的“内存管理”实际上就是指页面映射以及与此有关的操作。采用页式内存管理时,程序中所使用的内存地址,即CPU中的去处单元ALU所发原创 2012-10-29 09:02:28 · 861 阅读 · 0 评论 -
《Windows程序设计》之剪贴板查看器
注意的几点问题:1、WM_DRAWCLIPBOARD 与WM_PAINTCLIPBOARD的区分,WM_PAINTCLIPBOARD是由剪贴板查看器发给使用CF_OWNERDISPLAY剪贴板格式的程序的。WM_DRAWCLIPBOARD则是由Windows发给当前剪贴板查看器的。2、当程序想从剪贴板查看器链中退出时,必须调用ChangeClipboardChain,Windows会向原创 2012-05-24 09:19:02 · 1013 阅读 · 0 评论 -
作业中进程
1、进程在创建时,使用的是CREATE_SUSPENDED标志,这样会创建进程,但是不执行任何代码。 由于要创建进程的进程不是作业的一部分,所以新创建的进程也不是作业的一部分,如果立即开始执行代码, 它会“逃离”沙箱,成功做一些我想禁止的事。2、在创建子进程后且在运行之前,必须调用函数BOOL AssignProcessToJobObject(HANDLE hJob原创 2012-06-13 08:11:35 · 1755 阅读 · 6 评论 -
《Windows程序设计》之剪贴板
case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_EDIT_PASTE: //打开剪切板 OpenClipboard(hwnd); //取得指向文本的全局内存块的句柄 if(hGlobal=GetClipboardData(CF_TCHAR)) { //锁定剪切板,同时得到一个指向数据块的指针原创 2012-05-23 17:37:02 · 743 阅读 · 0 评论 -
《Windows程序设计》之公用对话框
好多天没写了,昨天下午刚考完单片机,这个的代码也太长了,写了半天,刚分析了一下,没那么复杂。代码就不贴了,太多了。说几点吧:1、在消息对话框中有非模态对话框与键盘加速键,这是第一次正式来用。2、在wsprintf中加入?:语句,这种方法以后应该会经常用到。3、几个公用对话框的结构体,FINDREPLACE,OPENFILENAME,LOGFINT,以后使用可以调用。4、注意不同原创 2012-05-23 09:08:07 · 981 阅读 · 0 评论 -
对作业中进程一些操作
1、Windows提供了一个作业(job)内核对象,它允许我们将进程组合在一起并创建一个“沙箱”来限制进程能够做什么。2、可以把作业对象想像成一个进程容器,创建只包含一个进程的作业同样有用,因为这样可以对进程施加平时不能施加的限制。3、IsProcessInJob(HANDLE hProcess,HANDLE hJob, PBOOL pbInJob);判断是否与一个作业相关联,在msdn上原创 2012-06-07 19:43:48 · 903 阅读 · 0 评论 -
进程相关
1、当不再使用进程对象与线程对象时,要记得关闭进程或线程的句柄。2、GetCurrentProcessId得到当前进程ID,GetCurrentThreadId得到当前正在运行线程的ID, GetProcessId获得与指定句柄对应的一个进程ID,GetThreadId获得与指定句柄对应的线程ID,GetProcessIdOfThread获得线程所有进程的ID。3、要保证一个进程原创 2012-06-05 15:46:43 · 885 阅读 · 0 评论 -
《Windows程序设计》之HEXCALC
#include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow){ static TCHAR szAppName[]=TEXT("HexCalc"); M原创 2012-05-17 09:52:17 · 1525 阅读 · 2 评论 -
《Windows程序设计》之非模态对话框
#include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);BOOL CALLBACK ColorScrDlg(HWND,UINT,WPARAM,LPARAM);HWND hDlgModeless;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PS原创 2012-05-16 10:40:53 · 1251 阅读 · 0 评论 -
模态对话框与非模态对话框
模态对话框允许用户在对话框和其他程序之间切换,但是,用户无法切换到同一程序的另一个窗口中,直到该模态对话框被销毁,前面写的一些基本都是这样的。非模态对话框允许用户在对话框与窗口之间,以及在对话框和其他程序之间进行切换。如一般的查找修改对话框。模态对话框使用DialogBox来产生,用EndDialog来结束;非模态对话框用CreateDialog来产生,用DestroyWindow来结原创 2012-05-16 11:04:43 · 1010 阅读 · 0 评论 -
《Windows程序设计》之对话框
///////////////////////////////////////////////////////////////////////////《Windows程序设计》第11章对话框代码ABOUT2/////////////////////////////////////////////////////////////////////////#include #include "原创 2012-05-14 15:58:45 · 1657 阅读 · 0 评论 -
《Windows》程序设计之对话框3
#include #include "RESOURCE.H"LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);BOOL CALLBACK AboutDlgProc(HWND,UINT,WPARAM,LPARAM);LRESULT CALLBACK EllipPushWndProc(HWND,UINT,WPARAM,LPARAM);in原创 2012-05-15 22:14:10 · 778 阅读 · 0 评论 -
《Windows核心编程》进程
《Windows程序设计》先放下了,不知道为什么,看不下去了,后面的感觉不是那么重要。开始了《Windows核心编程》。《Windows核心编程》进程可以说是读书笔记吧,怎么样从书中提取到对自己有用的东西,是一门学问,本人正在学习中,写的不好,大家见谅。一般将进程定义为一个正在运行的程序的实例,它由以下两部分构成:1、一个内核对象,操作系统用它来管理进程。内核对象也原创 2012-06-03 12:20:55 · 904 阅读 · 0 评论 -
《Windows程序设计》之位块传输
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ static HBITMAP hBitmap; static int cxClient,cyClient,cxSource,cySource; BITMAP bitmap; HDC hdc,hdcMem; HINSTANCE hIn原创 2012-05-24 15:06:43 · 681 阅读 · 0 评论 -
《Windows程序设计》之BITMAP
BITMAP的结构体如图所示 typedef struct tagBITMAP{ LONG bmType; //位图类型,必须为0 LONG bmWidth; //位图宽度 LONG bmHeight; //位图高度 LONG bmWidthBytes; //每一行像素所在的byte数 WORD bmPlanes; //颜色平面数 WORD bmBitsPixel; //原创 2012-05-24 15:56:08 · 1429 阅读 · 0 评论 -
CListCtrl派生类
前段时间,一直用的网上的一个类,数据量一大了以后,界面就显的很卡。网上很多都不合适,就研究了两天(好慢啊,自己太笨了),写了这个类,功能不多,适合新手学习。MyList.h/////////////////////////////////////////////////////////////////////////////CListCtrl类的一个派生类//该类的几点功能://1原创 2012-06-12 20:01:55 · 1330 阅读 · 0 评论 -
类中线程的使用
自己写了个例子,不知这种方式是否是常用方式,欢迎交流。例子中所含有的点:1、在类中函数创建线程,创建信号量。2、在线程中调用类中函数。3、线程检测信号量,来判断是否结束线程自身。程序中包含一个类CTest,一个主函数main.cpp。//Test.h//2012.10.10 by l0g1n#pragma once#include #include #incl原创 2012-10-10 14:48:44 · 3033 阅读 · 0 评论 -
vs2010中奇葩的问题
症状:写的一个单文档的程序,打开之后,窗口永远在左上角,一拖动,窗口大小就变小,BOOLCMainFrame::PreCreateWindow(CREATESTRUCT& cs)中设置cs属性也没有用。解决办法:在PreLoadState()里加CleanState();原因:VS2010会将一些信息写入注册表,这个和之前VS2005,VS2008(SP1除原创 2012-07-24 21:30:52 · 1980 阅读 · 0 评论 -
cout与wcout
一直以来只知道有cout用来输出,今天用cout输出wchar时出现问题了,输出结果是一段地址,才发现了wcout的存在。使用wcout输出中文时,又出现问题,中文输出不了,因为我在遍历文件,还以为是FindNextFile的问题,百度了一下基本找不到这问题,原来问题出现在wcout身上。总结几点:1、cout是用来输出char的,如果用cout输出wchar,只会输出地址,要使用wc原创 2012-08-04 18:49:51 · 6965 阅读 · 0 评论 -
【源码】VS2010清理助手
#include #include #include #include #include using namespace std;#pragma comment(lib,"Shlwapi.lib")void FileDelete(char* directory){ SHFILEOPSTRUCT shFileOp; memset(&shFileOp,0,sizeof(shFi原创 2012-08-04 22:31:38 · 2000 阅读 · 0 评论 -
Windows API函数大全
正文1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum转载 2012-06-28 09:39:27 · 2078 阅读 · 0 评论 -
用内核对象进行线程同步1
1、进程内核对象在创建的时候总是处于未触发状态。当进程终止时系统会自动使进程内核对象变成触发状态。2、线程内核对象也遵循上面的规则。3、等待函数使一个线程自愿进入等待状态,直到指定的内核对象被触发为止。常用的为WaitForSingleObject。4、WaitForMultipleObjects允许调用线程同时检查多个内核对象的触发状态。 WaitForMultipleOb原创 2012-06-22 09:44:02 · 946 阅读 · 0 评论 -
用户模式下的线程同步
1、在以下两种情况下,线程之间需要相互通信: 1)、需要要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性。 2)、一个线程需要要通知其他线程某项任务已经完成。2、原子访问,指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源。3、InterlockedExchangeAdd(&g_x,i);相当于g_x++,但是前者是原子操作,原创 2012-06-19 14:13:26 · 727 阅读 · 0 评论 -
线程优先级关联性
线程的一些其它东西,只是列举一下。没有太理解,没有实际应用一下,先放一下1、进程优先级,可以调用SetPriorityClass来改变进程优先级,也可以改变进程本身的。2、线程相对优先级,使用SetThreadPriority设置,获取线程优先级GetThreadPriority。3、动态提升线程优先级,允许或禁止系统提升一个进程中所有线程的优先级SetProcessPriorityB原创 2012-06-19 08:10:01 · 1012 阅读 · 0 评论 -
线程调度
1、创建一个被挂起的线程装CreateThread函数标志位传入CREATE_SUSPENDED2、ResumeThread恢复被挂起的线程,SuspendThread挂起线程(应当小心使用,防止因挂起而引起死锁)3、常用的Sleep函数,是使线程自愿放弃属于它的时间片中剩下的部分。只是近似。4、切换到另一个线程,系统提供了一个名为SwitchToThread的函数,如果存在一个可调度原创 2012-06-16 22:22:51 · 1501 阅读 · 0 评论 -
《Windows程序设计》之位图操作
1、在内存中创建位图,并在位图中写入文字 hdc=GetDC(hwnd); //创建内存设备上下文 hdcMem=CreateCompatibleDC(hdc); //计算指定的正文字符串的高度和宽度 GetTextExtentPoint32(hdc,szText,lstrlen(szText),&size); cxBitmap=size.cx; cyBitmap原创 2012-05-25 08:45:35 · 1094 阅读 · 0 评论 -
线程基础
1、线程由两部分组成: 1)、线程的内核对象,操作系统用它管理线程。系统还用内核对象来存放线程统计信息的地方。 2)、一个线程栈,用于维护线程执行时所需的所有函数参数和局部变量。2、CreateThread函数是创建线程的Windows函数。不过,如果写的是C/C++代码,就绝对不要调用CreateThread。 可以调用_beginthreadex函数。至于原因原创 2012-06-13 09:40:10 · 846 阅读 · 0 评论 -
CreateProcess
一个线程调用CreateProcess时,系统装创建一个进程内核对象,其初始使用计数为1。进程内核对象不是进程本身,而是操作系统用来管理这个进程的一个小型数据结构-----可以把进程内核对象想象成由进程统计信息构成的一个小型数据结构。然后,系统为新进程创建一个虚拟地址空间,并将可执行文件(和所有的DLL)的代码及数据加载到进程的地址空间。然后,系统为新进程的主线程创建一个线程内核对象(原创 2012-06-04 20:52:04 · 1613 阅读 · 0 评论 -
《Windows程序设计》之多文档
#include #include "RESOURCE.H"#define INIT_MENU_POS 0#define HELLO_MENU_POS 2#define RECT_MENU_POS 1#define IDM_FIRSTCHILD 50000//多个回调函数LRESULT CALLBACK FrameWndProc(HWND,UINT,WPARAM,LPARAM)原创 2012-06-01 08:26:03 · 1207 阅读 · 0 评论 -
《Windows程序设计》之菜单
感觉这些没啥可写的,就把两个合成一个吧,第一段代码是MENUDEMO中的部分,第二段是POPMENU。 switch(message) { case WM_COMMAND: //获取菜单句柄 hMenu=GetMenu(hwnd); //LOWORD(wParam)是菜单ID switch(LOWORD(wParam)) { case IDM_FILE_NEW:原创 2012-05-03 19:35:54 · 830 阅读 · 0 评论 -
《Windows程序设计》之图标
里面学习的东西不多,只是一些载入资源的方法,上点代码,同样是ICONDEMO中的回调函数部分。LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ static HICON hIcon; static int cxIcon,cyIcon,cxClient,cyClient; HDC h原创 2012-05-02 16:51:17 · 1026 阅读 · 0 评论 -
《Windows程序设计》之列表框控件
这部分代码是书中HEAD的部分,里面的东西值得细细去理会LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ static BOOL bValidFile; static BYTE buffer[MAXREAD]; static HWND hwndList,hwndText; sta原创 2012-05-02 12:35:57 · 1585 阅读 · 0 评论 -
《Windows程序设计》之子窗口
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ static COLORREF crPrim[3]={RGB(255,0,0),RGB(0,255,0),RGB(0,0,255)}; static HBRUSH hBrush[3],hBrushStatic; static HWND原创 2012-04-30 22:36:22 · 1476 阅读 · 0 评论 -
《Windows程序设计》之自给按钮
这次就不贴代码了,试一下总结下能学到的新的东西1、WM_DRAWITEM消息当windows要画这个控件的时候收到的消息,可以在这里设置控件的一些外观上的属性。前提是设置OWNER_DRAW标识,不设置是不会调此函数的。2、WM_CTLCOLORBTN消息当子窗口即将重绘客户区时,按钮控件会把这个消息发给其父窗口的窗口过程。当父窗口的窗口过程收到WM_CTBCOLO原创 2012-04-30 17:01:05 · 837 阅读 · 0 评论 -
《Windows程序设计》之按钮
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ static HWND hwndButton[NUM]; static RECT rect; static TCHAR szTop[]=TEXT("message wParam lParam"), szUnd[原创 2012-04-28 15:35:06 · 1258 阅读 · 0 评论 -
《Windows程序设计》之数字时钟
感觉这个时钟除了一些数学的知识外,还是映射坐标问题,到现在我也没有弄明白是怎么回事,贴点代码void SetIsotropic(HDC hdc,int cxClient,int cyClient){ //设置映射模式为MM_ISOROPIC SetMapMode(hdc,MM_ISOTROPIC); //设置Windows窗口大小1000*1000,窗口是看不到的,窗口的数原创 2012-04-28 08:53:46 · 1851 阅读 · 0 评论 -
MM_ISOTROPIC不懂啊,记录一下
MM_ISOTROPIC映射方式1、使用任意的轴时都保证两个轴上的逻辑单位相同2、刚开始将映射方式设定为MM_ISOTROPIC时,Windows使用与MM_LOMETRIC同样的视窗和视埠范围3、可以呼叫SetWindowExtEx和SetViewportExtEx来根据自己的偏好改变范围了4、您可以用所期望的逻辑视窗的逻辑尺寸作为SetWindowExtEx的参数、5、用显原创 2012-04-26 22:10:25 · 4256 阅读 · 0 评论 -
《Windows程序设计》之WHATCLR
void FindWindowSize(int *pcxWindow,int *pcyWindow){ HDC hdcScreen; TEXTMETRIC tm; //获取整个屏幕的设备描述表的属性信息,("DISPLAY")不能改为其它的 hdcScreen=CreateIC(TEXT("DISPLAY"),NULL,NULL,NULL); //获取hdcScreen中当前字体信息原创 2012-04-28 10:23:32 · 957 阅读 · 0 评论 -
《Windows程序设计》之数字时钟
void DisplayDigit(HDC hdc,int iNumber){ //这个数组是根据所要显示的数字来判断显示7个六边形是的哪几个 static BOOL fSevenSegment[10][7]={ 1,1,1,0,1,1,1,//0 0,0,1,0,0,1,0,//1 1,0,1,1,1,0,1,//2 1,0,1,1,0,1,1,//原创 2012-04-25 21:16:14 · 4378 阅读 · 3 评论 -
《Windows程序设计》之计时器2
这是使用SetTimer的第二种方法-----回调函数下面是几行关键的代码VOID CALLBACK TimerProc(HWND,UINT,UINT,DWORD);//定义回调函数SetTimer(hwnd,ID_TIMER,1000,TimerProc);//设置计时器,并调用回调函数//回调函数实现void CALLBACK TimerProc(HWND hwnd,UI原创 2012-04-24 21:34:44 · 947 阅读 · 0 评论