`
webcode
  • 浏览: 5941991 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

SDK窗口中增加菜单 以及 对菜单做出相应的消息响应

 
阅读更多

对于用MFC写程序的人来说会觉得菜单很简单 直接用 APP wizard生成就行了 消息处理也是 由MFC来完成 实际上根本不知道 菜单的原理 下面就介绍下如何在 SDK写的程序中添加菜单 我所使用的环境是 VC6.0

首先 SDK下我们需要手动加入菜单资源 点击 Project ->Add to Project -->new 新建一个 资源脚本 Resource Script 我们 Insert一个菜单资源 其他操作喝MFC一样

但是在 程序的开头要加上 #include "resource.h" 包含我们所创建的资源文件 ,然后在窗口 过程函数中做出相应的捕获 菜单的消息是 WM_COMMAND 然后我们在

根据 消息 附加参数 wParam来确定菜单的ID号 其实SDK的设计 就是这样 一个 WainMain函数喝一个窗口过程 就完成了

#include <windows.h>
#include <stdio.h>
#include "WINUSER.H"
#include "resource.h" //必须要加载 资源头文件 在SDK中women应该自己加入 菜单资源 对于菜单的消息是 WM_COMMAND
LRESULT CALLBACK WinProc( //窗口回调函数的声明
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain(
HINSTANCE hInstance, // 当前实例的句柄
HINSTANCE hPrevInstance, //先前实例的一个句柄
LPSTR lpCmdLine, // 命令行
int nCmdShow // 显示状态
)
{

WNDCLASS cls;
cls.cbClsExtra =0 ;
cls.cbWndExtra=0 ;
cls.hbrBackground=(HBRUSH)::GetStockObject(GRAY_BRUSH) ;
cls.hCursor=::LoadCursor(NULL,IDC_ARROW) ;
cls.hIcon=LoadIcon(NULL,IDI_ERROR);
cls.hInstance=hInstance ;
cls.lpfnWndProc=WinProc ;
cls.lpszClassName="SDK";
cls.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);
cls.style=CS_VREDRAW|CS_HREDRAW |CS_DBLCLKS|0x00020000;//|CS_NOCLOSE;
::RegisterClass(&cls) ;
HWND m_hWnd;
m_hWnd=::CreateWindow("SDK","New Win32 Application",WS_OVERLAPPEDWINDOW|WS_EX_TOOLWINDOW,100,200,600,600,NULL,NULL,hInstance,NULL) ; //创建窗口返回窗口的句柄
::ShowWindow(m_hWnd,SW_SHOWNORMAL) ; //显示窗口
::UpdateWindow(m_hWnd) ; //更新窗口
MSG msg ;
while(::GetMessage(&msg,m_hWnd,NULL,NULL)) //从消息队列检索消息
{
::TranslateMessage(&msg) ; //翻译消息
::DispatchMessage(&msg) ; //分发消息
}

return 0 ;
}
LRESULT CALLBACK WinProc(
HWND hwnd, // 窗体的句柄
UINT uMsg, // WM_开头的消息
WPARAM wParam, // 第一个附加参数
LPARAM lParam // 消息的第二个附加参数
)
{
switch(uMsg)
{
case WM_PAINT :
{
HDC hdc ;
PAINTSTRUCT ps ; //填充PAINTSTRUCT 结构体
hdc=::BeginPaint(hwnd,&ps) ; //BeginPaint() EndPaint()只有在响应WM_PAINT 消息的时候才会被调用 作用是从消息队列删除WM_PAINT 消息
//如果此处用GetDC来获取DC那么 就无法从消息队列中取出 WM_PAINT 消息 那么 windows会一直认为这是一个
//Invalid Area 无效区域 那么就会不停的重绘 导致程序卡死 。
::TextOut(hdc,10,10,"Win32_SDK",strlen("Win32_SDK")) ;
::EndPaint(hwnd,&ps); //在响应WM_PAINT 消息的时候 BeginPaint()后面必须跟上 EndPaint()
break;
}

case WM_LBUTTONDOWN:
{
HDC dc ;
dc=::GetDC(hwnd) ; //获得窗口的画布 ClientAprea
TextOut(dc,10,30,"Left Button Down!",strlen("Left Button Down!")) ;
break;

}

case WM_COMMAND : //此处是菜单消息的捕获
{
switch(wParam)
{
case IDM_OPEN :
{
::MessageBox(hwnd,"File Open","提示",MB_OK) ;
break ;
}
case IDM_NEW :
{
::MessageBox(hwnd,"File New","提示",MB_OK) ;
break ;
}
}

break;

}
case WM_CLOSE:
{ if(IDYES==::MessageBox(hwnd,"真的要退出?","提示",MB_YESNO))
::DestroyWindow(hwnd) ; //销毁窗体 销毁窗体的时候会发送一个 WM_DESTROY 消息 我们可以拦截这个消息并且调用PostQuitMessage(0)
break ; //来退出程序
}
case WM_DESTROY :
{ ::PostQuitMessage(0); //正常退出
break ;
}
case WM_RBUTTONDOWN :
{
MessageBox(hwnd,"Right Button Down","提示",MB_OK);
break ;
}

default: return DefWindowProc(hwnd,uMsg,wParam,lParam) ; //默认调用缺省的窗口过程

}
return 0 ;
}

分享到:
评论

相关推荐

    VC++ SDK编程窗口显示源代码

    在VC++中用SDK编程 实现一个窗口下的动态创建菜单,键盘鼠标响应以及光标样式显示.以及文字跟随光标移动等功能

    SkinMagic SDK for Visual C++

    SkinMagic SDK是为C/C++程序员设计的函数库,通过使用该库提供的API可以很方便的为你 的应用程序增加最流行的换皮肤的功能。SkinMagic是基于图片的皮肤系统,只要简单的几个 函数调用你的应用程序就具有了换皮肤的...

    RINGSDK包含界面库和图象库。

    VC6菜单tools-&gt;Options,选择Directoris页,把include,lib目录加入到相应文件列表,如果要调试,需要把libsrc目录下的各个子目录加入到Source files文件列表中。 工程依赖几个第三方库,需要先编译livsrc\free_lib...

    VC学习大纲 VC学习讲义

    讲述如何运用ClassWizard及对MFC消息响应函数机制的分析,理解发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表来用窗口类的函数进行响应的。掌握设备描述表及其封装类CDC的使用,CDC是如何与具体的...

    MFC的程序框架剖析

    默认的窗口过程,但MFC程序对消息的处理实际上是通过消息映射机制来完成的 19、MFC程序的运行过程 (1)首先利用全局应用程序对象theApp启动应用程序 (2)调用全局应用程序对象的构造函数,从而就会调用其基类CWinApp的...

    易语言程序免安装版下载

    符号重命名程序(resym.exe)增加对.obj文件的支持,并更新了文档(sdk\static_docs)。 3. 编译生成安装软件时已支持打包静态编译后的程序,但需事先静态编译出该程序。 4. 升级加密狗驱动程序,增加了对 Windows 7,...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    目前市场业务中在产品以及其他项目的认证和检测方面存在诸多不便,用户需要实地考察并频繁与检测单位沟通,填写繁琐的纸质检测报告、当面送递样品,对于检测环节中存在的问题难以及时交互并处理。市场上相应的检测...

    精通ANDROID 3(中文版)1/2

    7.4.7 使用菜单响应数据变化  7.5 通过XML文件加载菜单  7.5.1 XML菜单资源文件的结构  7.5.2 填充XML菜单资源文件  7.5.3 响应基于XML的菜单项  7.5.4 其他XML菜单标记简介  7.6 资源  7.7 小结  ...

    精通Android 3 (中文版)2/2

    7.4.7 使用菜单响应数据变化  7.5 通过XML文件加载菜单  7.5.1 XML菜单资源文件的结构  7.5.2 填充XML菜单资源文件  7.5.3 响应基于XML的菜单项  7.5.4 其他XML菜单标记简介  7.6 资源  7.7 小结  ...

    Visual C++2010开发权威指南(共三部分).part1.rar

    3.3.4 插入菜单的命令响应 136 3.3.5 修改菜单 137 3.4 小结 140 第4章 Visual C++ 2010 MFC对话框编程 141 4.1 对话框简介 141 4.1.1 对话框的控件简介 141 4.1.2 对话框的种类简介 149 4.1.3 设计对话框 150 4.2 ...

    Android应用开发入门教程

    2.2.5. 在Eclipse中配置Android SDK20 2.3 Android中运行仿真器环境21 2.3.1. 建立Android虚拟设备21 2.3.2. 运行虚拟设备22 2.3.3. 使用Android中的工具23 2.3.4. 使用logcat24 2.3.5. 使用仿真器控制25 2.3.6. ...

    JAVA上百实例源码以及开源项目

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器  Tcp服务端与客户端的JAVA实例源代码,一个简单...

    JAVA上百实例源码以及开源项目源代码

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的...

    飞雪桌面日历 7.6绿色

    (1)在收音机的右建菜单中执行[打开链接...], 输入网络电台的地址. (2)进入我的收藏,执行[添加到收藏...],输入电台的名称并保存 14.重装系统或升级时如何保留我的个人设置 1)重装系统。 方法一:在软件的...

Global site tag (gtag.js) - Google Analytics