VC API常用函数简单例子大全(5)

2019-04-16 15:31

switch(uMsg)

{

case WM_CHAR: //字符消息 char szChar[20];

sprintf(szChar,\ MessageBox(hwnd,szChar,\ break;

case WM_LBUTTONDOWN: //鼠标左键按下消息

MessageBox(hwnd,\ break; case WM_CLOSE:

if(IDYES==MessageBox(hwnd,\是否真的结束?\ {

DestroyWindow(hwnd); //销毁窗口,并发送WM_DESTROY消息给自身窗口 }

break;

case WM_DESTROY:

PostQuitMessage(0); break;

default:

return DefWindowProc(hwnd,uMsg,wParam,lParam); }

return 0; }

29:GetDC根据窗口句柄获取设备上下文(DC)返回DC句柄

得到了一个窗口的设备上下文,就可以进行画图操作了,像画圆,画正方形,显示图片等函数都是要设备上下文(DC)句柄做参数的。 HDC dc//定义一个DC句柄

HWND wnd=FindWindow(NULL,\无标题.txt - 记事本\获取窗口句柄 dc=GetDC(wnd)//获取这个窗口的设备上下文

30:Rectangle在窗口中画一个矩形

以\无标题.txt - 记事本\窗口为例,在这个窗口简单的画一个矩形 #include void main() {

HDC dc;

HWND wnd=FindWindow(NULL,\无标题.txt - 记事本\ dc=GetDC(wnd);//获取窗口设备上下文(DC)

while(1)//用循环语句重复画,是为了确保不会被窗口刷新给刷掉 {

Rectangle(dc,50,50,200,200);//画一个矩形 Sleep(200); } }

30:CreateToolhelp32Snapshot给当前进程拍一个照

HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

//记住这种格式就行了,返回的句柄,存储有进程信息,可以用Process32Firs函数找出来。

31:Process32First根据CreateToolhelp32Snapshot函数返回的句柄获取进

程信息

结合Process32Next函数使用,有点像文件寻找函数。 看完整例子:显示系统进程名,以及进程ID号 #include

#include//声明快照函数的头文件 #include int main()

{

PROCESSENTRY32 pe32;//进程的信息将会存储在这个结构里 //在使用这个结构之前,先设置它的大小 pe32.dwSize=sizeof(pe32);

//给系统内的所有进程拍一个快照

HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); BOOL bMore=::Process32First(hProcessSnap,&pe32);//第一次查找

while(bMore) {

printf(\进程名称:%s\\n\是进程名

printf(\进程ID号:%u\\n\\n\是进程ID号

bMore=::Process32Next(hProcessSnap,&pe32);//寻找下个进程,函数返回0,则没有进程可寻 }

return 0; }

32:OpenProcess根据进程ID号获得进程句柄,句柄通过函数返回

函数定义:HANDLE OpenProcess( DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId);

第一个参数表示希望获得的进程权限,一般填PROCESS_ALL_ACCESS,第二个参数也一样,填FALSE,那最后一个参数就是进程ID号。

33:TerminateProcess结束一个进程(需进程句柄做参数)

该函数只有两个参数,第一个是进程句柄,第二个填0就行了。

现在给个例子:假设当前有一个进程名为abc.exe的进程正在运行,编一个程序结束它。 #include

#include//声明快照函数的头文件 int main(int argc,char *argv[]) {

PROCESSENTRY32 pe32;

//在使用这个结构之前,先设置它的大小 pe32.dwSize=sizeof(pe32);

//给系统内的所有进程拍一个快照

HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //遍历进程快照,轮流显示每个进程的信息

BOOL bMore=::Process32First(hProcessSnap,&pe32); while(bMore) {

if(strcmp(\如果找到进程名为abc.exe {

HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);//获取句柄

::TerminateProcess(hProcess,0);//结束它 }

bMore=::Process32Next(hProcessSnap,&pe32);//寻找下一个 } return 0; }

上面的这个例子,只能结束普通权限进程,如果为系统进程的话,则没有用,结束不了。在后面的提升权限函数,会有例子说明如何结束系统进程。

34:CreatePen创建一个画笔(返回画笔句柄)

函数定义:BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor); 第一个参数,表示是什么类型的线,取值有以下:

如创建一个画笔:HPEN pen=CreatePen(PS_SOLID,3,RGB(255,78,99));

PS_SOLID 画笔画出的是实线 PS_DASH 画笔画出的是虚线(nWidth必须是1) PS_DOT 画笔画出的是点线(nWidth必须是1)

PS_DASHDOT 画笔画出的是点划线(nWidth必须是1) PS_DASHDOTDOT 画笔画出的是点-点-划线(nWidth必须是1)

第二个参数是画笔的宽度,第三个参数是画笔的颜色,COLORREF类型可以RGB来获得如RGB(233,128,88);分别是红绿蓝。

35:SelectObject把GDI对象选入相应的DC中

像画笔(句柄HPEN),画刷(HBURSH),位图(HBITMAP)等都是GID对象。因为画图函数,如画圆,画矩形,画直线,它们所画出图形,默认属性都是不变的,如线的宽度。那么想要改变画出来时线的宽度,比如我想画出来的图形它的线条宽度为5(像素),那么就要创建一个宽度为5的画笔,然后再通过SelectObject函数,给这个画笔选入,就可以了. 接下举个例子:SelectObject应用

#include \#include

LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) {

static HPEN pen=CreatePen(PS_SOLID,3,RGB(255,78,99));//创建画笔 static HBRUSH brush=CreateSolidBrush(RGB(22,182,111));//创建画刷 if(uMsg==WM_PAINT)//窗口需要重画的时候 {

HDC hDC;

PAINTSTRUCT ps;

hDC=BeginPaint(hwnd,&ps); //BeginPaint只能在响应WM_PAINT,不能用GetDC获取设备上下文

SelectObject(hDC,pen);//选入画笔 SelectObject(hDC,brush);//选入画刷 Rectangle(hDC,100,100,200,200); EndPaint(hwnd,&ps); }

else if(uMsg==WM_CLOSE)//用户关闭了窗口

DestroyWindow(hwnd);//销毁窗口,并发送WM_DESTROY消息

else if(uMsg==WM_DESTROY)//如果窗口被销毁 PostQuitMessage(0);//让进程退出

return DefWindowProc(hwnd,uMsg,wParam,lParam); //未处理的消息通过DefWindowProc函数交给系统处理

}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

WNDCLASS wndcls; //定义一个存储窗口信息WNDCLASS变量 wndcls.cbClsExtra=0; //默认为0

wndcls.cbWndExtra=0; //默认为0

wndcls.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH); //背景画刷 wndcls.hCursor=LoadCursor(NULL,IDC_ARROW); //光标 wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); //窗口图标

wndcls.hInstance=hInstance; //应用程序实例句柄由WinMain函数传进来 wndcls.lpfnWndProc=WinSunProc; //窗口消息处理函数 wndcls.lpszClassName=\窗口类名

wndcls.lpszMenuName=NULL; //窗口菜单名,没有菜单,为NULL

wndcls.style=CS_HREDRAW | CS_VREDRAW;//窗口类型,CS_HREDRAW和CS_VERDRAW 表明 //当窗口水平方向垂直方向的宽度变化时重绘整个窗口

RegisterClass(&wndcls); //把窗口信息提交给系统,注册窗口类

HWND hwnd; //用以存储CreateWindow函数所创建的窗口句柄 hwnd=CreateWindow(\

WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);//创建窗口 ShowWindow(hwnd,SW_SHOWNORMAL);//窗口创建完了,显示它 UpdateWindow(hwnd); //更新窗口,让窗口毫无延迟的显示

MSG msg;//消息结构类型

while(GetMessage(&msg,NULL,0,0))//获取消息 {

//TranslateMessage(&msg); //此函数用于把键盘消息(WM_KEYDOWN,WM_KEYUP)转换成字符消息WM_CHAR

DispatchMessage(&msg); //这个函数调用窗口过程处理函数,并把MSG里的信息处理后传给过程函数的四个参数 }

return 0; }

36:ReadProcessMemory根据进程句柄读取相应的一段内存(读其它进程

里的内存)


VC API常用函数简单例子大全(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:植物地理学复习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: