Windows应用程序的入口函数编写

写任何一个函数当然应该有一个该函数的入口了。我们知道c语言里的入口函数是main() 函数,那么在写Windows应用程序也是main()吗?回答当然不是了。我们用的是WinMain()函 数,不过我们在写MFC程序的时候好象没有看到该函数,其实这是微软为了帮助我们快速写一 个基于Windows应用程序,而把它封装起来了,当然我们也是可以找到的。在这里,我们试着 自己编写一个WinMain()函数。好了,我们进入主题吧!首先,我们要包含一些库。

#include <windows.h>
#include <stdio.h>

还有,我们应该学会使用msdn快速查找到我们所需要的信息。

这里,windows是基于消 息的应用程序,我们应该先编写一个消息响应函数,即一个回调函数。

LRESULT CALLBACK WinMYProc(
 HWND hWnd,   // handle to window
 UINT uMsg,   // message identifier
 WPARAM wParam, // first message parameter
 LPARAM lParam  // second message parameter
);

接下来是WinMainint WINAPI WinMain(
 HINSTANCE hInstance,   // handle to current instance
 HINSTANCE hPrevInstance, // handle to previous instance
 LPSTR lpCmdLine,     // command line
 int nCmdShow       // show state
)
{
WNDCLASS wndcls;//注册窗口类
wndcls.cbClsExtra=0;
  wndcls.cbWndExtra=0;
  wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口画刷
  wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);//鼠标
  wndcls.hIcon=LoadIcon(NULL,IDI_WINLOGO);//图标
  wndcls.hInstance=hInstance;//窗口实例
  wndcls.lpfnWndProc=WinMYProc;//窗口函数
  wndcls.lpszClassName="BEYOND";//窗口类名
  wndcls.lpszMenuName=NULL;//菜单名(这里为空)
  wndcls.style=CS_HREDRAW | CS_VREDRAW;//窗口风格(水平重绘和垂直重绘)
  RegisterClass(&wndcls);//注册窗口
//注册完窗口,接着是创建和显示窗口了
HWND hWnd;
hWnd=CreateWindow("BEYOND",lovebeyond",WS_OVERLAPPEDWINDOW,
    0,0,600,400,NULL,NULL,hInstance,NULL);
  ShowWindow(hwnd,SW_SHOWNORMAL);//显示
  UpdateWindow(hWnd);//更新
//接下来是消息循环了
  MSG msg;
  while(GetMessage(&msg,NULL,0,0))//当不为WM_QUIT时,继续消息循环
  {
    TranslateMessage(&msg);//用于翻译消息
    DispatchMessage(&msg);//发送消息
  }
  return msg.wParam;//返回一个参数
}
//消息响应函数
LRESULT CALLBACK WinMYProc(
 HWND hWnd,   // handle to window
 UINT uMsg,   // message identifier
 WPARAM wParam, // first message parameter
 LPARAM lParam  // second message parameter
)
{
  switch(uMsg)
  {
  case WM_CHAR://键盘消息
    char szChar[20];
    sprintf(szChar,"char is %d",wParam);
    MessageBox(hWnd,szChar,"char",0);
    break;
  case WM_LBUTTONDOWN://鼠标左键按下
    MessageBox(hWnd,"mouse clicked","message",0);
    break;
  case WM_PAINT://窗口重绘消息
    HDC hDC;
    PAINTSTRUCT ps;
    hDC=BeginPaint(hWnd,&ps);
    TextOut(hDC,0,0,"lovebeyond",strlen ("lovebeyond"));
    EndPaint(hwnd,&ps);
    break;
  case WM_CLOSE://关闭消息
    if(IDYES==MessageBox(hWnd,"想要结束吗? ","message",MB_YESNO))
    {
      DestroyWindow(hWnd);
    }
    break;
  case WM_DESTROY://销毁窗口消息
    PostQuitMessage(0);
    break;
  default://默认窗口消息处理
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
  }
  return 0;
}

到此,所有程序结束,读者也可以试着自己写一个类似的程序,加入更多的响应 功能。这里就到此结束。希望对大家了解windows程序有所帮助。

时间: 2024-12-31 15:04:02

Windows应用程序的入口函数编写的相关文章

Directx11 教程(1) 基本的windows应用程序框架(1)

       在vs2010中,建立一个新的win32工程,名字是: myTutorialD3D11, 注意:同时勾选Create directory for solution,我们同时建立一个solution,后面教程的所有的工程文件,我们都建立在这个solution中.   勾选 Emtpy project 增加source files->add new item->main.cpp   创建一个windows应用程序需要以下步骤: 1.在入口Main函数中注册窗口类 2.调用Create

asp.net中WPF应用程序入口函数(Main函数)小结

Windows窗体应用程序的入口函数在Program.cs文件中,但WPF应用程序没有这个文件,WPF应用程序入口函数在哪里呢?手工添加一个入口函数,生成项目,出错: 原来WPF应用程序入口函数在objReleaseApp.g.cs文件中: 程序代码  代码如下 复制代码 public partial class App : System.Windows.Application {             /// <summary>     /// InitializeComponent   

api-C#如何调用API函数编写64的程序,求指导

问题描述 C#如何调用API函数编写64的程序,求指导 会用C#调用win32API函数,但是编写的程序只能在32位系统上运行,现在想调用API函数编写64位的程序,怎么实现呢,求思路. 解决方案 一样的,windows会用wow的 解决方案二: C#中调用一些API函数

在CB6下基于api函数编写串口通信程序简介

1-在C++ Builder 6.0下基于api函数编写串口通信程序简介: 在dos/win95/win98的年代,操作系统对串口是不保护的,也就是说将串口的的资源完全开放给用户,用户可以用直接操作硬件的函数(比如说TC2.0下的inport()和outport()函数) 跟串口直接打交道,这时候用户使用直接操作串口的函数怎样"折磨"串口都是没有问题的,操作系统根本就不管不问,对串口操作所造成的一切后果都是用户一个人承担的,这时候用户对串口具有高度自由的支配权:但是,这种情况好景不长,

c#编写windows应用程序如何安装部署,并且能把sql2000数据库也很完整的自动的部署到相应电脑上呢?

问题描述 c#编写windows应用程序如何安装部署,并且能把sql2000数据库也很完整的自动的部署到相应电脑上呢? 解决方案 解决方案二:安装部署应该不难吧.如果要把.NETframeWork和SQL加入,右键点击安装项目--点击右下角Prerequisites--然后选择你要发布的东西,下边单选选择第二个(如果你要让他从网上下载请选其他),就可以了解决方案三:SQLServer有一个部署工具,使用即可解决方案四:编写数据库脚本解决方案五:用户如果需要独立服务器,肯定是要布署的.看你的软件是

如何在Windows NT、Windows 2000和Windows XP中使用VDMDBG函数

摘要 即使是在 32位环境中编写程序,也经常碰到处理 16位应用程序的情况.在 Windows NT 中,16位程序是运行在虚拟 DOS 机(VDM)中的.VDMDBG.dll 包含许多处理16位程序的有用函数,这个库是 Platform SDK 的一部分. VDMDBG 中的函数提供了很好的方式在 VDM 中枚举.创建和终止 16位进程(任务).本文将描述如何在Windows NT.Windows 2000 和 Windows XP 中使用这些函数. 如果需要使用 VDMDBG 函数,你的工程

在C#中调试Windows窗体程序

在控制台应用程序中Main函数是程序的入口点.同样地,在Windows窗体应用程序中,Main函数也是程序入口点.这可以通过调试看出来,方法如下所示. (1)打开或新建一个Windows窗体应用程序,如前面的FormsTest应用程序. (2)单击"调试"|"逐句调试"命令,也可以按快捷键F11.可以看到,程序会跳转到Program.cs文件.指示运行的黄色箭头指向Main函数的起始位置. (3)继续按F11键,直到运行箭头移动到函数最后一句,代码如下所示. App

比较windows phone程序启动和android程序启动原理

windows phone 程序是如何启动的了,他和android程序有什么区别,我们重点从native code 层面来分析  在windows phone 程序启动的时候是: 在XAML中使用应用程序定义指定起始Page(它是启动 WindowsPhone7程序时自动加载的Page). 指定方法是将 StartupUri 属性设置为所需的 Page 的 统一资源标识符 (URI). 可以在标记中以声明方式设置 StartupUri,如下面的示例所示. <Application     xml

VS2010 win32项目windows窗体程序 向导生成代码解析

目录: 1.Win32项目的windows窗体程序的向导生成了如下代码 2.手工生成代码如下 3.当消息队列中没有消息需要处理,我们可以利用这段时间处理我们自己的任务 1.Win32项目的windows窗体程序的向导生成了如下代码: [cpp] view plaincopy // Timer.cpp : 定义应用程序的入口点.   //      #include "stdafx.h"   #include "Timer.h"      #define MAX_LO