![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Windows API
文章平均质量分 59
Welson80
这个作者很懒,什么都没留下…
展开
-
Pen和Brush
获取画笔:hPen=GetStockObject(WHITE_PEN);hPen=CreatePen(iPenStyle, iWidth, crColor);hPen=CreatePenIndirct(&logpen);虚线画笔的中空隙颜色:SetBkColor(hdc,crColor);SetBkMode(hdc,iMode);画笔空隙背景有两种Mode,OPAQUE(默认)和TRANSPARENT。OPAQUE即设置SetBkColor的crColor,TRANSPARENT……绘图模式:SetROP2原创 2010-07-19 23:37:00 · 2816 阅读 · 0 评论 -
子窗口控件——列表框(List Box)
窗口类型"listbox"。默认的列表框给父窗口发送WM_COMMAND消息,所以几乎所有列表框都加LBS_NOTIFY,允许列表框发送WM_COMMAND,LBS_SORT可以让列表自动排序。LBS_MULTIPLESEL创建多选列表框。LBS_NOREDRAW会在添加列表后阻止列表更新,也可以利用WM_SETREDRAW消息。另外还可与WS_BORDER、WS_SIZEBOX、WS_CAPTION一起使用。Windows定义了常用的风格LBS_STANDARD,它定义为(LBS_NOTIFY | LBS翻译 2010-08-11 22:17:00 · 2565 阅读 · 0 评论 -
资源——图标(ICON)、鼠标、字符串资源、自定义资源
<br />ICON<br />LoadIcon(hInstance,MAKEINTRESOURCE(IDI_MYICON)):IDI_MYICON是资源标识,定义在resource.h里。<br />LoadIcon(hInstance,TEXT("MYICON"):修改资源标识为"MYICON"(包括引号)或者修改.rc文件的IDI_MYICON ICON "icon.ico" 一行中的IDI_MYICON为"MYICON"(不包括引号),可以以字符串加载。<br />GetSystemMetrics(翻译 2010-08-12 16:26:00 · 2282 阅读 · 0 评论 -
资源——菜单(Menu)与快捷键(Keyboard Accelerators)
<br />创建载入菜单<br />wndcls.lpszMenuName=MAKEINTRESOURCE(IDM_MENU),也可用LoadMenu(hInstance,MAKEINTreSOURCE(IDM_MENU)),后者要在CreateWindow中传入菜单句柄或者在窗口创建后调用SetMenu(hwnd,hMenu)。挂在窗口上的菜单在结束时都会被销毁,所有没有挂在窗口的菜单在程序结束前都要用DestroyMenu销毁。<br /> <br />菜单消息<br />WM_INITMENU:在选择翻译 2010-08-13 00:19:00 · 2393 阅读 · 0 评论 -
剪切板
<br /> <br />剪切板数据格式有三类:文本(text)、位图(bitmap)和元文件(metafile),每类又有细分,定义在WINUSER.H中,CF_开头。<br />写入剪切板<br />GlobalAlloc(GHND | GMEEM_SHARE,nSize):返回一个全局句柄<br />GlobalLock(hGlobal):返回内存块指针。<br />写数据<br />GlobalUnlock(hGlobal)<br />OpenClipboard(hwnd):任何时候只能有一个程序打翻译 2010-08-14 23:28:00 · 3012 阅读 · 0 评论 -
资源——对话框(Dialog Box)
一般菜单项的后面加省略号(...)提示该菜单会激活一个对话框。对话框的坐标X轴以对话框所用字体宽度的1/4为单位,Y轴以字体高度的1/8为单位。对话框处理过程与窗口处理过程很相似,但也有一些不同,对话框过程不是窗口过程。一般在对话框处理过程中,我们只需要处理子窗口控件的初始化、子窗口控件消息和结束对话框。下面是一个对话框过程:BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,lParam){ switch(message)翻译 2010-08-13 17:21:00 · 3688 阅读 · 0 评论 -
打印机
打印机信息OpenPrinter (szDevice, &hPrint, NULL):得到打印机szDevice的句柄PrinterProperties (hwnd, hPrint):打开打印机属性页,也可以用驱动提供的ExtDeviceMode或ExtDeveModePropSheet函数,但推荐这个。ClosePrinter(hPrint)GetDeviceCaps(hdcInfo,index):获取设备参数。RASTERCAPS返回打印机是否支持位块(bit-block)转换,在部分点阵、激光、喷墨打翻译 2010-08-26 23:26:00 · 3203 阅读 · 0 评论 -
位图
Bit-Block Transfer相比图元文件,位图有两个大缺点,一是易受设备依赖性问题影响。比如在一个单色设备上显示位图经常不会令人满意;还有位图的缩放,经常涉及到行或列的重复或丢弃,这样会造成缩放位图的混乱。第二个缺点是位图占用存储空间大。然而,位图最大的优点是速度,显示位图要比图元文件快得多。GetDeviceCaps的BITSPIXEL和PLANES参数获取显卡的颜色参数。BitBlt(hdcDst,xDst,yDst,cx,cy,hdcSrc,xSrc,ySrc,dwROP):把hdcSrc(x翻译 2010-08-27 20:55:00 · 1628 阅读 · 1 评论 -
设备无关位图 DIB
结构体DIB文件有四个主要部分: 文件头(file hearder) 位图信息头(information header) RGB颜色表(RGB color table),24位位图没有 位图像素(bitmap pixel bits)DIB在内存中的格式只有后面三个部分,没有文件头。DIB的结构体都定义在WINGDI.H头文件中。文件头结构体(bmfh):typedef struct tagBITMAPFILEHEADER{ WORD bfType; DWORD bfSiz翻译 2010-08-29 16:56:00 · 2447 阅读 · 0 评论 -
文本和字体
简单的文本输出TextOut(hdc,xStart,yStart,pString,iCount):xStart是第一个字符的水平位置,但这个参数的意义可以用SetTextAlign改变,TA_LEFT为默认方式,TA_RIGHT则xStart是最后一个字符的水平位置,TA_CENTER则xStart是中间字符的水平位置。同样,TA_TOP、TA_BOTTOM和TA_BASELINE表示yStart的意义——字符在垂直方向的位置,TA_TOP为默认。如果用TA_UPDATECP标记,则系统忽略xStart和y翻译 2010-09-11 22:57:00 · 1806 阅读 · 0 评论 -
多文档接口(MDI)
<br /><br />MDI的元素<br />一个主窗口,包括标题栏、工具栏、菜单栏、系统菜单图标、可拉伸边框、最大最小化按钮、客户区。客户区不直接显示输出,而是有0个或多个子窗口,每个子窗口显示一个文档。<br />子窗口很像主窗口,只是没有菜单栏。在同 一时刻只有一个子窗口是激活的。<br />MDI看起来用子窗口可以实现,但当研究一下现有的MDI应用程序,就会发现实现起来需要复杂的编码。<br /> <br />MDI接口<br />Windows 98 MDI包括一个窗口类、五个函数、两个结构体和翻译 2010-09-20 09:30:00 · 2919 阅读 · 0 评论 -
多线程
<br /><br />CreateThread(&security_attributes,dwStackSize,ThreadProc,pParam,dwFlags,&idThread):第一个参数是SECURITY_ATTRIBUTES指针,Windows 98忽略这个参数,Windows NT中也可为NULL。第二个参数是初始栈大小,0表示默认值。第三个参数是线程函数指针,ThreadProc必须按以下方式声明<br />DWORD WINAPI ThreadProc(PVOID pParam)。<b翻译 2010-09-20 21:53:00 · 1065 阅读 · 0 评论 -
子窗口控件——文本框(Edit Control)
<br />CreateWindow(TEXT("edit"),NULL,WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL,0,0,0,0,hwnd,(HMENU)ID_EDIT,hInstance,NULL);ES_NOHIDESEL还可使失去输入焦点时,选择的文字仍然高亮。<br /> <br />WM_COMMAND翻译 2010-08-11 17:05:00 · 1328 阅读 · 0 评论 -
子窗口控件——按钮(BUTTONS)
创建子窗口 示例:CreateWindow(TEXT("button"),TEXT("PUSHBUTTON"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,50,100,LOWORD(GetDialogBaseUnits())*13,HIWORD(GetDialogBaseUnits())*7/4,hwnd,(HMENU)1,((CREATESTRUCT *)lParam)->hInstance,NULL); TEXT("button")是窗口类型,系统翻译 2010-08-10 11:38:00 · 2540 阅读 · 0 评论 -
GDI 映射模式
<br />Windows 在WINGDI.H里定义了八种GDI映射模式:MM_TEXT、MM_LOMETRIC、MM_HIMETRIC、MM_LOENGLISH、MM_HIENGLISH、MM_TWITPS、MM_ISOTROPIC和MM_ANISOTROPIC。可使用SetMapMode(hdc, iMapMode)选择映射模式。<br />这八种映射模式分两类:前六种和后两种。第一类映射方式逻辑(ViewPort)坐标和物理(Window)坐标比例不能修改,而第二类可以。第一类出除了MM_TEXT模式原创 2010-07-26 23:42:00 · 1363 阅读 · 0 评论 -
PeekMessage与GetMessage
<br />GetMessage(&msg,NULL,0,0)为阻塞函数,如果消息队列中没有消息,GetMessag就一直阻塞,如果收到WM_QUIT则返回FALSE。<br />PeekMessage(&msg,NULL,0,0,PM_REMOVE)不阻塞,如果消息队列中没消息返回FALSE,有消息返回TRUE。<br />PeekMessage的第五个参数PM_REMOVE表示消息是要从消息队列中移除,也可设为PM_NOREMOVE,作用相反。<br />GetMessage与PeekMessage都不翻译 2010-07-28 00:02:00 · 826 阅读 · 0 评论 -
矩形、区域相关
FillRect(hdc, &rect, hBrush)用hBrush填充rect。hBrush可以不选入hdc就可直接使用。FrameRect(hdc, &rect, hBrush)用hBrush画矩形边框InvertRect(hdc, &rect)把rect内所有像素颜色取反RECT结构结构体操作函数:SetRect(&rect,xLeft,yTop,xRight,yBottom)OffectRect(&rect,x,y):移动rectInflateRect(&rect,x,y): 改变rect大小Se翻译 2010-07-27 22:27:00 · 925 阅读 · 0 评论 -
光标(Caret)
常用函数:CreateCaretSetCaretPosShowCaretHideCaretDestroyCaretGetCaretPosGetCaretBlinkTimeSetCaretBlinkTime光标使用的一些规则:1. 如果程序中用到光标,不能简单的在处理WM_CREATE消息时调用CreateCaret,在处理WM_DESTROY消息时调用DestroyCaret。因为如果程序中有多个窗口,Windows只共享一个光标。简单的方法是,在WM_SETFOCUS中调用CreateCaret,在WM_翻译 2010-08-06 21:25:00 · 1921 阅读 · 0 评论 -
鼠标
函数:GetSystemMetrics(SM_MOUSEPRESENT):鼠标可用返回TRUE,不可用返回FALSE,但Windows 98总返回TRUE。GetSystemMetrics(SM_CMOUSEBUTTONS):返回鼠标的键数。鼠标不可用返回0(Windows 98返回2)。GetSystemMetrics(SM_SWAPBUTTON):鼠标是否是左手习惯。一般来说程序不需要知道这个,因为操作系统屏蔽了这些,即使左手习惯点了右键,也产生的是左键的消息。但是在一些程序中如果要监控物理鼠标点击的是翻译 2010-08-07 11:49:00 · 917 阅读 · 0 评论 -
子窗口程序示例
#include #define DIVISIONS 5LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);LRESULT CALLBACK ChildWndProc(HWND,UINT,WPARAM,LPARAM);TCHAR szChildName[]=TEXT("ChildWindow");int idFocus=0;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPre翻译 2010-08-08 13:44:00 · 790 阅读 · 0 评论 -
键盘
四种击键消息:WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN、WM_SYSKEYUP。一般与ALT键结合的击键会产生系统击键消息,交由Windows处理(DefWindowProc)。对所有四种消息,wParam是虚拟键码,表示按下或弹起。lParam是击键的数据。翻译 2010-08-06 00:41:00 · 585 阅读 · 0 评论 -
定时器
<br />函数:<br />SetTimer KillTimer<br />消息:<br />WM_TIMER<br />说明:<br /> 理论上SetTimer可以设置1到4294967295(将近50天)毫秒的时间间隔,但Windows 98最小时间间隔为55毫秒,Windows NT大约是10毫秒,而且定时不准确,比如在Windows 98下设置1000毫秒的定时,实际上只有989毫秒。WM_TIMER和WM_PAINT一样,优先权较低,只有当消息队列中没有消息时,才会产生消息,对于消息翻译 2010-08-08 23:39:00 · 721 阅读 · 0 评论 -
日期和时间
GetLocalTime(&st):与时区有关GetSystemTime(&st):Ust是SYSTEMTIME结构体。GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ITIME, szBuffer,2):szBuffer[0]=='1'则表示系统为24时制。GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ITLZERO, szBuffer, 2): szBuffer[0]=='0'表示系统不显示数字前的0。未完成翻译 2010-08-08 23:57:00 · 676 阅读 · 0 评论 -
子窗口控件——滚动条控件(Scroll Bar)
SBS_VERT和SBS_HORZ。点击滚动条控件,给父窗口发送的是WM_VSCROLL或WM_VSCROLL而不是WM_COMMAN。消息的lParam是窗口句柄,wParam与窗口滚动条一样,低字是通知码(SB_LINEUP等),高字是滚动块的位置。可以用GetSystemMerics(SM_CYHSCROLL)得到窗口垂直滚动条的长度,用SM_CXVHSCROLL参数得到水平滚动条的宽度。在对话框中,可以用SBS_LEFTALIGN等设置滚动条的停靠。一些函数:SetScrollRange(hwndS翻译 2010-08-11 11:22:00 · 2813 阅读 · 1 评论 -
子窗口控件——静态控件(Static)
创建 使用"static"做为窗口类型创建静态窗口控件。类型 SS_BLACKRECT、SS_BLACKFRAME、SS_GRAYRECT、SS_GRAYFRAME、SS_WHITERECT、SS_WHITEFRAME。“RECT”类型是填充的矩形,”FRAME“是不填充的矩形。BLACK、GRAY和WHITE并不是控件颜色,而是系统色:BLACK——COLOR_3DDKSHADOW、GRAY——COLOR_BTNSHADOW、WHITE——COLOR_BTNHIGHLIGHT。翻译 2010-08-11 10:21:00 · 2934 阅读 · 0 评论 -
动态链接库(DLL) (含进程通信之共享内存)
<br /> <br />简单的DLL<br />/*---------------------- EDRLIB.H header file ----------------------*/#ifdef __cplusplus#define EXPORT extern "C" __declspec (dllexport)#else#define EXPORT __declspec (dllexport)#endifEXPORT BOOL CALLBACK EdrCent翻译 2010-09-21 22:55:00 · 7063 阅读 · 0 评论