随笔分类 -  Windows程序设计

摘要:动态链接库1.目标库与输入库 .lib扩展文件名 用于程序开发期间目标库在静态链接时将库中的代码加到程序中. 输入库不含代码,而是为链接程序提供信息,以便在引用程序中建立动态链接时提供重定位表2.动态链接库 .dll扩展文件名 用于程序运行期间.搜索顺序:使用者当前目录, 当前目录,Windows系统目录,Windows目录,环境变量PATH可以访问到的目录多个进程能够共享一个动态链接库中相同的代码,但是DLL为每个进程保存的数据都不同3.不使用输入库的动态链接首先,typedef return_value (*PFNNAME)(参数1,...,参数n),然后 HANDLE handle=Lo 阅读全文
posted @ 2012-06-21 15:05 让代码飞一会儿 阅读(163) 评论(0) 推荐(0) 编辑
摘要:多线程建议的体系结构:主线程创建程序所需的所有窗口,并在其中中包括所有的窗口过程,以便处理这些窗口的所有消息;其他的所有县城只进行一些后台处理,除了和主线程通讯,他们不和用户进行交流.方法:主线程处理用户输入(和其他消息),并创建进程中的其他县城,这些附加的线程完成与用户无关的任务(UI线程 WORK线程) 线程局部存储(TLS)CreateThread(&security_attributes, //安全令牌 一般为NULL dwStackSize, //默认为0, windows根据需要动态延长堆栈大小 ThreadProc, //指向线程函数指针 DWORD WIN... 阅读全文
posted @ 2012-06-21 14:15 让代码飞一会儿 阅读(231) 评论(0) 推荐(0) 编辑
摘要:文本和字体 windows支持两大类字体, GDI字体:存储再硬盘的文件中 设备字体:输出设备所固有的1.TextOut(hdc,xStart,yStart,pString,iCount), SetTextAlign() TA_LEFT,TA_RIGHT,TA_CENTER,TA_TOP, TA_BOTTOM, TA_BASELINETabbedTextOut(), ExtTextOut()DrawText(hdc,pString,iCount,&rect,iFormat) //pString如果是以null为结尾的字符串,则iCount可设为-1,windows会自动计算长度2.Se 阅读全文
posted @ 2012-06-21 14:15 让代码飞一会儿 阅读(178) 评论(0) 推荐(0) 编辑
摘要:位图和BitBlt1.位块传送BitBlt(bit-block transfer读作"bit blit"),函数实际上对像素执行了一次位运算操作BitBlt(hdcDest,xDst,yDst,cx,cy,hdcSrc,xSrc,ySrc,dwROP) //源设备描述表中将一个矩形区的像素传送到目标的另一个设备描述表中相同大小的矩形区.StretchBlt(hdcDst,xDst,yDst,cxDst,cyDst,hdcSrc,xSrc,yrc,cxSrc,cySrc,dwROP),SetStretchBltMode(hdc,iMode) //拉伸或压缩使用PatBlt(h 阅读全文
posted @ 2012-06-19 10:14 让代码飞一会儿 阅读(236) 评论(0) 推荐(0) 编辑
摘要:子窗口使用GetParent()可以获得父窗口的窗口句柄.然后SendMessage与父窗口通信,自定义窗口消息>=WM_USERWindows系统预定义了一系列控件(子窗口),在CreateWindow时指定WS_CHILD的window style,及设置父窗口句柄.指定子窗口ID时应强制转换为HMENU类型1.按钮控件 (10个按钮风格) buttonWM_COMMAND消息由父窗口捕获,wParam低字为子窗口ID,高字为通知码,lParam子窗口句柄具有BS_GROUPBOX的按钮,既不处理鼠标输入也不处理键盘输入也不向父窗口发送WM_COMMAND消息其中BS_OWNERDR 阅读全文
posted @ 2012-06-13 10:18 让代码飞一会儿 阅读(453) 评论(0) 推荐(0) 编辑
摘要:计时器1.SetTimer 时间间隔范围1~4294967295毫秒(约50天) 使用完之后应KillTimer 清除消息队列中未被处理的WM_TIMER消息 2.在SetTimer调用中指定的时间间隔总是结尾为时钟滴答的整数倍. 其参数除以54.925毫秒后取整数商.所以例如: SetTimer(1000); -> SetTimer(989); 对于每个小于55毫秒的间隔,每个系统时钟滴答都会产生一个WM_TIMER消息 注意:WM_TIMER并不是异步消息 它类似于WM_PAINT消息使用方式: 1.处理WM_TIMER消息 2.在SetTimer时指定第4个参数,设置回调函数Get 阅读全文
posted @ 2012-06-07 17:46 让代码飞一会儿 阅读(146) 评论(0) 推荐(0) 编辑
摘要:鼠标 是否存在 GetSystemMetrics(SM_MOUSEPRESENT) true/false 键个数 GetSystemMetrics(SM_CMOUSEBUTTONS) 左右手习惯 GetSystemMetrics(SM_SWAPBUTTON) 其他参数SystemParametersInfo鼠标消息中的lParam 低字节x坐标, 高字节y坐标 wParam鼠标键机shift,ctrl键的状态 MK_SHIFT MK_CONTROL MK_LBUTTON MK_RBUTTON MK_MBUTTON命中测试消息WM_NCHITTEST 鼠标键在窗口中失效的办法,在消息WM_NCH 阅读全文
posted @ 2012-06-06 17:16 让代码飞一会儿 阅读(157) 评论(0) 推荐(0) 编辑
摘要:击键消息WM_KEYDOWN WM_KEYUP通常是不带Alt键产生的消息,wparam是虚拟键代码(在winuser.h中定义的VK_的常量),lparam包含属于击键的其他数据lParam的32位分为6个域:31:转换状态 正被释放为0 否则为130:键的先前状态 释放为0 否则为129:环境代码 在Alt按下后或WM_SYSKEYUP,WM_SYSKEYDOWN消息时为1. 2个例外, 1)活动窗口最小化,即无输入焦点,值为0, 2)特殊键盘消息24:扩展键标志23-16: 8位OEM扫描码15-00: 16位重复计数(击键次数)GetKeyState(VK_SHIFT) 返回值为负则按 阅读全文
posted @ 2012-06-05 17:19 让代码飞一会儿 阅读(179) 评论(0) 推荐(0) 编辑
摘要:设备描述表1.在WM_PAINT消息时PAINTSTRUCT ps;HDC hdc = BeginPaint(hwnd,&ps);EndPaint(hwnd,&ps);PAINTSTRUCT中包含一个rcPaint的矩形结构,定义为包含窗口客户区的无效范围矩形2.非WM_PAINT消息时2.1hdc=GetDC(hwnd); //整个绘图区的句柄ReleaseDC(hwnd,hdc);不使客户区任何可能的无效区域变为有效 (不刷新窗口显示?)2.2适用于整个窗口,而非客户区,必须捕获WM_NCPAINT消息hdc=GetWindowDC(hwnd);ReleaseDC(hwnd 阅读全文
posted @ 2012-06-04 14:49 让代码飞一会儿 阅读(181) 评论(0) 推荐(0) 编辑
摘要:Windows使用2种方法获取设备描述表句柄1.处理WM_PAINT消息时, 先调用BeginPaint(HWND, PAINTSTRUCT*),其返回值即是设备描述表句柄HDC(32位无符号整数).在处理完该消息后必须调用EndPaint(HWND, PAINTSTRUCT*).如果不处理该消息需要将消息传递给DefWindowProc(). 默认剪取区域为无效区域PS. 自定义擦除背景需要在窗口过程中处理WM_ERASEBKGND消息如果要在处理WM_PAINT消息时在更新的矩形外绘图,需要在调用BeginPaint前调用InvalidateRect(hwnd, null, true),这 阅读全文
posted @ 2012-06-01 11:33 让代码飞一会儿 阅读(219) 评论(0) 推荐(0) 编辑
摘要:一个Windows程序的开发步骤#include <windows.h>//1.窗口类需要一个窗口过程,所以先声明一个窗口过程函数LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd ){ static TCHAR app_name[] = TEXT("HelloWin"); 阅读全文
posted @ 2012-05-25 23:13 让代码飞一会儿 阅读(223) 评论(0) 推荐(0) 编辑
摘要:对于windows 32位系统char* p = 0; sizeof(p) == 4char c = 'a'; sizeof(c) == 1char a[10]; sizeof(a) == 10当字符串由单字节模式改为宽字节模式时,字符串长度不变,改变的是字节数.例:char s[] = "hello"; //字符串长度为5 字节数为6wchar_t ss[] = L"hello"; //字符串长度仍为5 但是字节数为12头文件tchar.h定义了 TCHAR 当定义UNICODE或_UNICODE时为 wchar_t 否则为 char# 阅读全文
posted @ 2012-05-24 23:30 让代码飞一会儿 阅读(204) 评论(0) 推荐(0) 编辑