windows32
文章平均质量分 87
hellokazhang
不羁的游戏开发者,喝得惯红酒,吃得了大排档,不轻易给自己设限。
展开
-
区域例子浅析
区域还有一个很重要的函数,上次漏讲了,这次补上。iRgnType=CombineRgn(hDestRgn,hSrcRgn1,hSrcRgn2,iCombine);iCombine的值新的区域RGN_AND两个区域的公共部分RGN_OR两个区域的全部RGN_XOR两个区域的全部,除去公共部分RGN_DIFFh原创 2012-08-02 09:43:33 · 491 阅读 · 0 评论 -
多任务和多线程(2)
创建一个有四个窗口的多线程程序,第一个窗口显示一个递增的数列,第二个窗口显示一个递增的质数数列,第三个窗口显示一个递增的斐波那契数列,第四个窗口显示一些随机产生大小不一的圆一个可能的方案是使用WM_TIMER消息中处理多个更新,但是没有人圆心根据计算机速度来写程序;看看多线程的解决方法:程序有点长,思路却很清晰#include#include#includetype原创 2012-08-11 22:53:54 · 808 阅读 · 0 评论 -
多任务和多线程(1)
创建一个线程的API函数叫做CreateThreadhThread=CreateThread(&security_attributee,dwStackSize,ThreadProc,pParam,dwFlags,&idThread);大部分的Windows程序员都会倾向于使用C的运行时库函数_beginthread()(在头文件process.h中)hThread=_beginth原创 2012-08-11 22:47:18 · 785 阅读 · 0 评论 -
位图和位块传输(2)压缩拉伸之StretchBlt函数
在BitBlt函数中,目标图像和源图像的大小一样,是因为函数只有两个参数来指定宽和高,如果想要复制是拉伸或压缩图像的大小,可以使用StretchBlt函数StretchBlt(hdcDst,xDst,yDst,cxDst,cyDst,hdcSrc,xSrc,ySrc,cxSrc,cySrc,dwRop);下面这个程序展示了一下StretchBlt函数的功能,它把整个客户区填满成系统菜单原创 2012-08-10 20:14:47 · 1481 阅读 · 0 评论 -
位图和位块传输(1)BitBlt与PatBlt
BitBlt读作"bit blit"表示位块传输,BitBlt函数是像素移动者,或者,更生动的说,点阵撞击者,下面是一个简单的BitBlt#includeLRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifie原创 2012-08-10 20:05:31 · 3378 阅读 · 0 评论 -
位图和位块传输(6)画框与会移动的小球
由一个很常用的技巧,这个方法使用"掩码"位图和一些光栅操作,掩码是一个单色位图,它的大小和你要显示的矩形位图大小相同。每个掩码像素对应要显示的位图上的一个像素,要显示出来的像素对应的掩码像素为白色(1)下面来看看这个例子(来自Windows程序设计第五版圣经)#include#include"resource.h"LRESULT CALLBACK WindowProc(原创 2012-08-10 21:03:07 · 811 阅读 · 0 评论 -
位图和位块传输(5)之画图程序
下面是一个很经典的程序,画图程序:可以画图,可以擦掉(来自Windows程序设计第五版)#includeLRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, /原创 2012-08-10 20:51:51 · 1206 阅读 · 0 评论 -
位图和位块传输(3)之加载位图资源
Windows提供了两个能在位图被创建后取得和设置位图像素的函数SetBitmapBits(hBitmap,cBytes,&bits);GetBitmapBits(hBitmap,cBytes,&bits); 使用GDI位图对象时,需要用到内存设备环境,要创建一个内存设备环境,必须有一个对应真实设备的环境句柄。假设句柄是hdc,则可以像下面这样创建一个内存设备环境hdcMem=原创 2012-08-10 20:29:08 · 752 阅读 · 0 评论 -
对话框(3)之调用Windows函数调色板
代码来自Windows程序设计第五版第十一章最后一个知识点直接贴代码了:#include#includeint WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow){ static CHOOSECOLOR cc; static COLORREF转载 2012-08-09 00:24:04 · 989 阅读 · 0 评论 -
对话框(1)之对话框的建立与如何添加窗口左上角的小ICON图标
前面的博客有一篇专门写了《如何创建自己的ICON图标》,在讲对话框之前,先讲一下如何修改窗口左上角的小图标,这个跟exe的ICON图标有点不一样,不是直接在CreateWindow的倒数第三个参数=LoadIcon(NULL,MAKEINTRESOURCE(ICONID))就行了,这样只是对exe大图标有用,详细请看我的前面的博客。其实32X32和16X16的ICON图标的ID是一样的。这两者原创 2012-08-08 13:18:20 · 5220 阅读 · 1 评论 -
多任务和多线程(3)
多线程通常被用于需要长时间运行任务的程序,我们把这种任务称为“大任务”,也就是运行时间超过1/10秒的任务,常见的有Word里的拼写检查,数据库中的文件排序或索引,电子表格的计算,打印,复制的绘制。下面这个两个程序效果是一样的,主要测试的是:点击左键,该程序进行一百万次的计算,在计算机过程中,点击右键可以终止,如果不终止,运算完后显示计算时间代码如下:#include#incl原创 2012-08-11 23:05:20 · 752 阅读 · 0 评论 -
win32初窥
今天来窥视一下win32的窗体程序,学习windows32到底有没有必要呢,到底windows32有没有过时,其实这个答案我已经告诉你了,要不然我也不会窥视windows32.不会c++,不会windows32编程的人,不要说自己是一名程序员。windows32学好了,MFC学好了,那你就牛逼了。那么学习windows32必要的条件是什么呢:1扎实的C++基础2visual C++原创 2012-07-30 14:54:34 · 888 阅读 · 0 评论 -
矩形和区域
下面有三个绘图函数需要一个指向矩形结构的指针:FillRect(hdc,&rect,hbursh);//填充FrameRect(hdc,&rect,hbrush);//掏空InvertRect(hdc,&rect);//内部取反case WM_PAINT: hdc=BeginPaint(hwnd,&ps); //GetClientRect(hwnd,&rect);原创 2012-08-02 09:12:03 · 1175 阅读 · 0 评论 -
WINDING方式不能填充所有内部区域的图形的例子
Polygon函数和多边形填充模式:LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ static int cxChar,cxCaps,cyChar,cxClient,cyClient; TCHAR szBuffer[10]; HDC hdc; i原创 2012-08-01 15:11:18 · 693 阅读 · 0 评论 -
PeekMessage函数和随机矩形
我们都知道消息循环的函数,下面可以用别的函数来代替while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg);}return msg.wParam;替换成while(TRUE){ if(PeekMessage(&msg,NULL,0,原创 2012-08-02 09:35:09 · 841 阅读 · 2 评论 -
GDI映射模式浅析
Windows定义了8中映射模式,她们在WINGDI.H中定义的标识符如下:映射模式逻辑单位X轴Y轴MM_TEXT像素右下MM_LOENGLISH0.1mm右上MM_HIMETRIC0.01mm右上MM_LOENGLISH0.01in右上MM_HIENGLIS原创 2012-08-01 22:25:03 · 1857 阅读 · 0 评论 -
绘图(直线和曲线)
画线函数有以下七种:1LIneto 画直线2Polyline和PolylineTo 画一条由多条首尾相连的直线构成的折线3PolyPolyline 画多条折线4Arc原创 2012-07-31 23:39:58 · 950 阅读 · 0 评论 -
两种获取HDC的方法和TextOut输出
windows32挺好玩的,买本windows32的书,慢慢啃,理解windows32到底是怎么工作的,尤其是消息循环这一块,其实windows32最重要的就是你写的proc函数,消息循环接收任何消息,都调用你写的windowproc函数,如果有人觉得windows32入门很痛苦,建议大家看看孙鑫的c++20讲之第一讲,保证有收获。windows32不用重头到尾都自己敲代码,可以有技巧的使用M原创 2012-07-31 10:15:55 · 5678 阅读 · 1 评论 -
为窗体加上滚动条
为windows32窗体加入滚动条,代码如下:#includeLRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM原创 2012-07-31 14:13:18 · 584 阅读 · 0 评论 -
绘图(直线,曲线)例子
画数学函数:#include#include#define NUM 1000#define TWOPI (2*3.14159)LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam原创 2012-08-01 09:06:36 · 788 阅读 · 0 评论 -
windows32基础和GetSystemMetrics函数
有个坏消息,windows程序中不能使用printf函数好消息是,仍然可以使用sptrinf和系列的其他函数来显示文本下面观察printf和sprintf的定义int printf(const char* szFormat,...);int sprintf(char * szBuffer,const char* szFormat,...);在console下,你可以这样输出原创 2012-07-30 16:47:03 · 712 阅读 · 0 评论 -
勿看(垃圾杂物)
都叫你勿看的啦,垃圾杂物堆放在这。SendMessage(hwndCtrl,BM_SETCHECK,1,0);选中BUTTON按钮SendMessage(hwndCtrl,BM_SETCHECK,0,0);取消BUTTON选中 hwndCtrl=GetDlgItem(hDlg,id);通过对话框窗口句柄和控件ID来获取对话框控件窗口句柄的函数 id=GetWindowLong原创 2012-08-08 21:17:14 · 1240 阅读 · 0 评论 -
对话框(2)图说例子(经典)
一个相对简单的例子,对学习对话框很有帮助:以VS2008为工具1新建Win32项目,编写代码2新建资源,添加ICON如图: 3资源,添加菜单:如图: 4资源,添加对话框,拖拽控件如图:其中左上角的ICON就是刚刚建立的ICON:即: 还有一些值得注意的地方:单选按钮,一个GroupBox只允许选一个要这样设置:所在的Gro原创 2012-08-08 18:03:43 · 890 阅读 · 0 评论 -
鼠标(4)
看看这个简单的程序(还需要改进)#include#include#define DIVISIONS 5LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first me原创 2012-08-03 21:32:40 · 709 阅读 · 0 评论 -
鼠标(3)
使用键盘模仿鼠标操作:ShowCursor(TRUE);//显示坐标ShowCursor(FALSE);//隐藏坐标GetCursorPos(&pt);//获取鼠标坐标SetCursorPos(x,y);//设置鼠标坐标下面是一个简单的程序,利用四个方向键控制鼠标的移动,是鼠标(2)的升级版程序如下:#include#include#define DIVIS原创 2012-08-03 19:51:52 · 921 阅读 · 0 评论 -
鼠标(2)
Windows的GetKeyState函数能够返回鼠标按钮或Shift等键的状态,当GetKeyState函数返回一个负值时,表示已经按下了鼠标按钮或相应的Shift或Ctrl键。在没有按下鼠标时,不能使用GetKeyState函数。在鼠标事件的时候,有时候,需要对参数wParam和MK_XX进行位与运算if(wParam & MK_SHIFT){ if(wParam原创 2012-08-03 12:39:23 · 905 阅读 · 0 评论 -
获取鼠标坐标GetCursorPos
下面这个例子是获取屏幕的坐标:#include #includeLRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter原创 2012-08-03 18:12:33 · 10012 阅读 · 0 评论 -
鼠标(1)
鼠标的按钮操作,主要以下三种1单击:然下鼠标,然后松开2双击:连续两次快速按下鼠标按钮,然后松开3保持按下按钮,并移动鼠标下面看看按钮事件:按钮按下释放第二次按下按钮左键WM_LBUTTONDOWNWM_LBUTTONUPWM_LBUTTONDBLCLK原创 2012-08-03 09:22:08 · 948 阅读 · 1 评论 -
插入符号的函数和TYPER程序
Windows中有五个基本的插入符号函数:CreateCaret创建和窗口关联的插入符号SetCaretPos设置窗口内的插入符号的位置ShowCaret显示插入符号HideCaret隐藏插入符号DestroyCaret销毁插入符号case WM_PAINT: hdc=BeginPa原创 2012-08-02 23:08:22 · 1167 阅读 · 0 评论 -
键盘控制滚动条(熟悉)
下面是用来显示的数据:(Windows程序设计上的例子)struct{ int iIndex ; TCHAR * szLabel ; TCHAR * szDesc ;}sysmetrics [] ={ SM_CXSCREEN, TEXT ("SM_CXSCREEN"),原创 2012-08-02 13:47:34 · 1314 阅读 · 0 评论 -
PlaySound播放音乐
今天测试了一下windows32的PlaySound函数,路径没错,运行也不报错,但是却听不到歌曲的声音,运行的时候听到一声“咚”。加个循环的话就发出“咚咚咚”的响声,求帮忙,其中wav文件是由mp3文件修改后缀而成的,无论是绝对路径还是相对路径,都没有听到音乐的效果,还有一定,PlaySound()写的路径正确与否都不会报错,求帮忙?(论坛已求助,无人问津)代码如下:#include#p原创 2012-07-31 14:04:44 · 1394 阅读 · 0 评论 -
现有的画笔和创建自己的画笔6zhongGDI
Windows会使用当前选入设备环境的“画笔”来绘制直线,画笔决定了线条的颜色,宽度和样式,样式可以是实线,点线或者虚线。画笔的默认设备环境是BLACK_PEN,该画笔绘制了一条实心的宽度为一个像素的黑色线条,windows提供了三种“备用画笔”,分别是BLACK_PEN,WHITE_PEN,NULL_PEN。可以是用GetStockObject函数来获取备用画笔的句柄,使用SelectObj原创 2012-08-01 10:38:21 · 731 阅读 · 0 评论 -
鼠标(5)滚轮
这不是一个噱头,看代码,虽然很长,但却很经典,可以实现键盘,滚轮滑动滚动条。下面是头文件,是存储的数据。#define NUMLINES ((int) (sizeof sysmetrics / sizeof sysmetrics [0]))struct{ int iIndex ; TCHAR * szLabel ; TCHAR *原创 2012-08-03 23:54:31 · 686 阅读 · 0 评论 -
计时器(1)之3种方法
你可以使用SetTimer函数为自己的Windows程序分配一个计时器,SetTimer包含一个无符号的整形参数,该参数指定了时间间隔的长短,单位是毫秒。该函数的功能是在指定时间间隔内向你的程序发送一条WM_TIMER消息;计时器消息不是异步的。因为计时器是基于硬件计时器的中断,程序员有时候会被误导,认为他们的程序可能会被异步中断打断后被迫去处理wm_timer消息,事实上,Windo原创 2012-08-04 09:44:21 · 1117 阅读 · 3 评论 -
菜单和其他资源(3)之创建自己的浮动菜单
即使没有顶级菜单栏,也可以使用菜单,你可以让弹出菜单出现在屏幕的任何位置。一种途径是作为对鼠标右键单击响应来激活相应的弹出菜单,这就是浮动菜单。注意比较一下普通菜单和浮动菜单的区别,普通菜单可以看我的上一篇博客。下面来讲讲步骤,步骤跟普通菜单的步骤基本一直,不过有一点值得注意,在编辑菜单选项的时候,应该...,还是截图吧,一目了然也就是说,把普通菜单的popmenu当成了子菜单选项原创 2012-08-07 20:48:11 · 769 阅读 · 0 评论 -
菜单和其他资源(2)之创建自己的菜单
菜单可能是Windows程序提供的一致的用户界面中最重要的部分,而想程序中添加菜单是Windows编程中相对容易的布冯。当用户选择菜单单选时,Windows向你的程序发送了一个含有才菜单单选ID的WM_COMMAND消息LOWORD(wParam)控件IDHIWORD(wParam)通知码lParam子窗口句柄 创建菜原创 2012-08-07 13:14:07 · 1081 阅读 · 0 评论 -
子窗口控件(5)之编辑类and列表框类
子窗口控件中wParam和lParam变量的含义LOWORD(wParam)子窗口IDHIWORD(wParam)通知码lParam子窗口句柄 编辑控件的通知消息 EN_SETFOCUS编辑控件得到了输入焦点EN_KILLFOCUS失去了输入焦点EN_CHANGE原创 2012-08-05 23:01:01 · 910 阅读 · 0 评论 -
子窗口控件(4)之滚动条和静态子窗口的使用
滚动条类跟窗体滚动条差不多。如果想创建和窗口具有相同尺寸的滚动条控件,则可以使用GetSystemMetrics获得水平滚动条的高度GetSystemMetrics(SM_CYHSCROLL);或获得垂直滚动条的宽度GetSystemMetrics(SM_CXVSCROLL);同样可以窗口滚动条函数来设置滚动条控件的范围和位置SetScrollRange(hwn原创 2012-08-05 13:37:15 · 868 阅读 · 0 评论 -
子窗口控件(3)之属性罗列和自绘按钮
Windows有29种系统颜色,每种颜色都在0-255之间,它使用GetSysColor和SetSysColors来调用颜色参数:也就是Windows下的画板的颜色:罗列一下具体的29种颜色的参数: 如下调用:SetBkColor(hdc,GetSysColor(COLOR_BTNFACE));SetTextColor(hdc,GetSysColor(Color原创 2012-08-05 10:28:38 · 960 阅读 · 0 评论 -
子窗口控件(2)之消息处理
通知码进一步给出每条消息的意思,下面是按钮的通知码的可能值。按钮通知码标识符值 BN_CLICKED0BN_PAINT1BN_HILITE或BN_PUSHED2BN_DISABLE3BN_DISABLE4BN_DOUBLECLICKED或BN_DBLCLK5BN_原创 2012-08-05 01:02:45 · 1196 阅读 · 0 评论