当前位置:首页 » 编程软件 » win32实例编程

win32实例编程

发布时间: 2023-05-31 23:05:41

❶ 求救,WIN32编程最简单问题

他是win的一个图形映射模式,该模式下允许利用SetWindowExtEx和SetViewportExtEx函数设置图形映射时的缩放比例。
以下给一个用到isotropic的小程序
他利用鼠标左右键的单击动作实现方块的平移和缩放。
其中,平移动作不依赖于mm_isotropic,在任何图形映射模式下都可实现,缩放必须在mm_isotropic(锁定长宽比)或者mm_anisotropic(长宽独立缩放)模式下才能实现

#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //窗口函数说明
//------------ 以下初始化窗口类----------------
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd ;
MSG Msg ;
WNDCLASS wndclass ;
char lpszClassName[] = "窗口"; //窗口类名
char lpszTitle[]= "My_Windows"; //窗口标题名

//窗口类的定义
wndclass.style = 0; //窗口类型为历孙缺省类型
wndclass.lpfnWndProc = WndProc ; //窗口处理函数为WndProc
wndclass.cbClsExtra = 0 ; //窗口类无扩展
wndclass.cbWndExtra = 0 ; //窗口实例无扩展
wndclass.hInstance = hInstance ; //当前实例句柄
wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION) ;
//窗口的最小化图标为缺省图标
wndclass.hCursor = LoadCursor( NULL,IDC_ARROW); //窗口采用箭头光标
wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH); //窗口背景为白色
wndclass.lpszMenuName = NULL ; //窗口中无菜单
wndclass.lpszClassName = lpszClassName; //窗口类名为"窗口示例"

//--------------- 以下进行窗口类的注册 -----------------
if( !RegisterClass( &wndclass)) //如果注册失败则发出警告声音
{
MessageBeep(0) ;
return FALSE ;
}

//创建窗口
hwnd=CreateWindow(
lpszClassName, //窗口类名
lpszTitle, //窗口实例的标题名
WS_OVERLAPPEDWINDOW, //窗口的风格
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口左上角坐标为缺省值
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口的高和宽为缺省值
NULL, //此窗口无父窗口
NULL, //此窗口无主菜单
hInstance, //创建此窗口的应用程序的当前句柄
NULL) ; //不使用该值

ShowWindow( hwnd, nCmdShow); //显示窗肢清链口
UpdateWindow(hwnd); //绘制用户区
while( GetMessage(&Msg, NULL, 0, 0)) //消息循环
{
TranslateMessage( &Msg) ;
DispatchMessage( &Msg) ;
}
return Msg.wParam; //消息循环结束即程序终止时将信息返回系统
}

int xx=100,yy=0;
/正高/窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0); //调用PostQuitMessage发出WM_QUIT消息
break;

case WM_SIZE:
InvalidateRect(hwnd,NULL,1);
break;

case WM_LBUTTONDOWN:
if(xx<150){
xx=200;
}else{
xx=100;
}
InvalidateRect(hwnd,NULL,1);
break;
case WM_RBUTTONDOWN:
if(yy<50){
yy=100;
}else{
yy=0;
}
InvalidateRect(hwnd,NULL,1);
break;
case WM_PAINT:
HDC dc; //开始绘制窗口
HBRUSH brush;
HPEN pen;
PAINTSTRUCT ptstr;
dc=BeginPaint(hwnd,&ptstr);

SetMapMode(dc,MM_ISOTROPIC);
SetWindowExtEx(dc,xx,xx,NULL);
SetViewportExtEx(dc,100,100,NULL);
SetViewportOrgEx(dc,yy,yy,NULL);
SetWindowOrgEx(dc,0,0,NULL);

Rectangle(dc,100,100,200,300);

EndPaint(hwnd,&ptstr);

break;
default: //缺省时采用系统消息缺省处理函数
return DefWindowProc(hwnd,message,wParam,lParam);
}
return (0);
}
另外,虚机团上产品团购,超级便宜

❷ Win32编程原理

所谓的Win32开发,就是在C语言的层面上,直接使用Win32API开发Windows应用程序或者系统程序。虽说现在直接用Win32API开发应用程序的人已经不多了,但是深入理解Windows系统程序设计原理,仍然是成为Windows开发高手的良好途径。所谓的Win32,其实是一个API规范,与UNIX系统编程接口标准POSIX是相对应的。下面是进行直接的WIN32SDK方式编程的基本思路或者说是一个框架:
一个Windows程序分为程序代码和UI(UserInterface用户接口)资源两大部份,两部份最后以RC编译程序整合为一个完整的EXE文件。所谓UI资源是指功能菜单、对话框、程序图标、光标形状等等东西。这些UI资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如.ico.bmp.cur等等。程序员必须在一个所谓的资源描述档(.rc)中描述它们。RC编译器(RC.EXE)读取RC文件的描述后将所有UI资源文件集中制作出一个.RES文件,再与程序代码结合在一起,这才是一个完整的Windows可执行文件。
与控制台程序相同的是,一个Win32程序也必须有一个程序入口点,但是在这儿它不再叫main(),而叫做WinMain(),当WINDOWS的SHELL检测到用户欲执行一个EXE程序,就会调用加载器把程序进行加载,然后调用Cstartupcode,后者再调用WinMain(),程序的执行就开始了,WinMain()函数的原型为:
intCALLBACKWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow);
下面程序必须进行必要的初始化工作-产生窗口,第一步是注册一个窗口类:用API函数:RegisterClass(),而这个函数需要一个已经定义好的系统结构:WNDCLASS,这个结构里面定义了窗口的种种属性,需要自己定义,但是许多属性都有默认值。然后调用CreateWindow()函数来产生具有上述定义属性的已注册窗口,但是需要注意的是它只是生成窗口,但并不显示之,所以还需要调用一个函数ShowWindow()将它显示在屏幕上,做完这些初始化工作以后,系统将进入消息循环:
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);}
当消息循环捕捉到消息以后将交由窗口函数WndProc()窗口函数进行相应的处理。这样,一个基于消息事件驱动的WIN32程序的雏形就建立了起来。

❸ 什么是win32编程

Win32编程,指的是用Window提供的API(Application Programming Interface)为Window编写应用程序。
之所以称之为Win32,是因为现在的Window都是32位的(现在已经有64位的吧!但是最普遍是32位).
大家都知道,Window是由GDI.DLL、USER.DLL、KERNEL.DLL三大主要部分组成的。(其实你现在不知道也
不是说的很重要。只是在你学习编程的过程中,你肯定会经常碰到这几个字眼。你肯定会熟悉它的。),那么
学习Win32编程的大部分(特别是应用程序界面部分的编程)是用这三个DLL(Dynatic Linked Library)动态链接库
子程序形式提供的API函数。

就我认为:学习Win32编程得有几个重要条件:一是C语言功底。二是外语功底。三是使用Window的经验。
要学习它不是很难,但也决非易事:

首先:你必须有编程的经验。这里的经验不是指传统的DOS下的字符模式下的编程。大家都知道,Window是图形
操作系统、同时也多任务抢占式(理解它很重要),它是在图形模式下工作。当然你编程得服从于它。但是正
是因为这个,Window的编程模式就和DOS不一样。所有你得有DOS下编程的经验,但是还得转变为WINDOW下的编程
方式。因为两个系统的编程一个是过程化的。即程序从上到下,顺序执行。而另一个是,事件驱动的。要明白
这个,才会体验到Window的博大精深。
我觉得有必要对Window操作系统有所了解。什么是多任务,什么是抢占式。进程和线程的概念。但是刚
开始没有必要因为这些概念让我们失去信心。因为只要你入门了,你就会非常兴奋。
事件驱动:我们知道DOS下程序是顺序执行的。至少它是按着你指定的路径或条件执行的。尽管可能会
在某些条件下跳转,但是基本上是在你(程序的掌握之中),但是在事件驱动中,你只需考虑到可能出现的情
况,并对这些情况做相应的处理。当Window执行你的程序时,它会检测是否发生了你考虑的那些事情是否发生
,如果发生了某件事情(比如你用鼠标单击),它会给你的程序发送相应的消息(所以叫做消息驱动,这里
对就鼠标的消息是WM_MOUSELDOWN等).

❹ 求WINDOWS服务编程实例

我写的,参考一下:
#include <windows.h>
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>

#define DEFAULT_BEEP_DELAY 3000

char * SERVICE_NAME="BeepService";
HANDLE terminateEvent=NULL;
SERVICE_STATUS_HANDLE serviceStatusHandle;
int beepDelay=DEFAULT_BEEP_DELAY;
BOOL pauseService=FALSE;
BOOL runningService=FALSE;
HANDLE threadHandle=0;

void SendStatusToSCM(DWORD dwCurrentState,DWORD dwWin32ExitCode,DWORD dwServiceSpecificExitCode,DWORD dwCheckPoint,DWORD dwWaitHint)
{
SERVICE_STATUS servicestatus;
servicestatus.dwServiceType=SERVICE_WIN32_OWN_PROCESS;
servicestatus.dwCurrentState=dwCurrentState;
if(dwCurrentState==SERVICE_START_PENDING)
{
servicestatus.dwControlsAccepted=0;
}
else
{
servicestatus.dwControlsAccepted=SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_PAUSE_CONTINUE|SERVICE_ACCEPT_SHUTDOWN;
}

if (dwServiceSpecificExitCode==0)
{
servicestatus.dwWin32ExitCode=dwWin32ExitCode;
servicestatus.dwServiceSpecificExitCode=0;

}
else
{
servicestatus.dwWin32ExitCode=ERROR_SERVICE_SPECIFIC_ERROR;
servicestatus.dwServiceSpecificExitCode=dwServiceSpecificExitCode;
}
servicestatus.dwCheckPoint=dwCheckPoint;
servicestatus.dwWaitHint=dwWaitHint;
SetServiceStatus(serviceStatusHandle,&servicestatus);
}

DWORD ServiceThread(LPDWORD parm)
{
while(1)
{
Beep(200,200);
Sleep(beepDelay);
}
return 0;
}

VOID Handler(DWORD controlcode)
{
switch(controlcode)
{
case SERVICE_CONTROL_STOP:
SendStatusToSCM(SERVICE_STOP_PENDING,NO_ERROR,0,1,5000);
runningService=FALSE;
SetEvent(terminateEvent);
return;
case SERVICE_CONTROL_PAUSE:
if(runningService && ! pauseService)
{
SendStatusToSCM(SERVICE_PAUSE_PENDING,NO_ERROR,0,1,1000);
pauseService=TRUE;
SuspendThread(threadHandle);
SendStatusToSCM(SERVICE_PAUSED,NO_ERROR,0,0,0);
}
break;
case SERVICE_CONTROL_CONTINUE:
if(runningService && pauseService)
{
SendStatusToSCM(SERVICE_CONTINUE_PENDING,NO_ERROR,0,1,1000);
pauseService=FALSE;
ResumeThread(threadHandle);
SendStatusToSCM(SERVICE_RUNNING,NO_ERROR,0,0,0);
}
break;
case SERVICE_CONTROL_INTERROGATE:
break;
case SERVICE_CONTROL_SHUTDOWN:
return;
}

}

VOID ServiceMain(DWORD argc,LPTSTR * argv)
{
serviceStatusHandle=RegisterServiceCtrlHandler(SERVICE_NAME,(LPHANDLER_FUNCTION) Handler);
SendStatusToSCM(SERVICE_START_PENDING,NO_ERROR,0,1,5000);
terminateEvent=CreateEvent(0,TRUE,FALSE,0);
SendStatusToSCM(SERVICE_START_PENDING,NO_ERROR,0,2,1000);
if(argc==2)
{
int temp=atoi(argv[1]);
if (temp<1000)
{
beepDelay=DEFAULT_BEEP_DELAY;
}
else
{
beepDelay=temp;
}
}
DWORD id;
threadHandle=CreateThread(0,0,(LPTHREAD_START_ROUTINE)ServiceThread,0,0,&id);
runningService=TRUE;
SendStatusToSCM(SERVICE_RUNNING,NO_ERROR,0,0,0);
WaitForSingleObject(terminateEvent,INFINITE);
CloseHandle(terminateEvent);
SendStatusToSCM(SERVICE_STOPPED,NO_ERROR,0,0,0);
CloseHandle(threadHandle);
}

VOID main(VOID)
{
SERVICE_TABLE_ENTRY serviceTable[]={{SERVICE_NAME,(LPSERVICE_MAIN_FUNCTION)ServiceMain},{NULL,NULL}};
BOOL success;
success=StartServiceCtrlDispatcher(serviceTable);
if(! success) ExitProcess(GetLastError());
}

❺ win32编程实例怎么理解,等于窗口吗窗口类又怎么理解,还有回掉函数…这些代码的顺序是什么…高手

100分,肥。窗口句柄(HWND)都是由操作系统内核管理的,系统内部有一个z-order序列,记录着当前从屏幕底部(假象的从屏幕到眼睛的方向),到屏幕最高层的一个窗口句柄的排序,这个排序不关注父窗口还是子窗口。当任意一个窗口接受到WM_PAINT消息睁陪产生重绘,更新区绘制完成以后,就搜索它的前面的一个窗口,如果此窗口的范围和更新区有交集,就向这个发送wm_paint消息,周而复始,直到执行到顶层窗口。才算完成。对于一个对话框(主窗口来说,其所有子窗口都在茄早洞他的前面——也就是更靠近眼睛的位置),所以主窗口接受wm_paint绘制完成后,会引起更新区上所有子窗口的重绘(所有子窗口也是从底到外排序的)。无所颤枯谓谁管,每个窗口都是对等的,都有自己的消息相应函数,只不过属性不同。逻辑上可以这么理解,但其实,操作系统是按主窗口排序,然后一个主窗口的所有子窗口是等级的,它们再一个排序。所以逻辑上可以说,系统中所有窗口句柄都有个排序。。望采纳,谢谢。

热点内容
没有卡没有密码怎么办啊 发布:2025-02-13 01:51:53 浏览:460
linux2个ftp服务器 发布:2025-02-13 01:44:31 浏览:14
戴尔r730网络配置后如何保存 发布:2025-02-13 01:38:27 浏览:344
php用什么编译 发布:2025-02-13 01:37:12 浏览:703
手机缓存的文件路径是在哪 发布:2025-02-13 01:34:58 浏览:563
oppo手机密码哪里设置 发布:2025-02-13 01:30:38 浏览:683
android网易 发布:2025-02-13 01:30:37 浏览:488
不联网怎么看自己的配置 发布:2025-02-13 01:00:38 浏览:858
饥荒联机版独立服务器有什么用 发布:2025-02-13 01:00:38 浏览:637
高级语言都有与之对应的编译程序或解释程序 发布:2025-02-13 00:54:46 浏览:571