首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

小弟我的第一次编写Win32应用程序

2012-04-05 
我的第一次编写Win32应用程序我在编写过程中遇到了很多的问题,但在厚脸皮的不断发帖询问下终于代码全部没

我的第一次编写Win32应用程序
我在编写过程中遇到了很多的问题,但在厚脸皮的不断发帖询问下终于代码全部没有问题了,可是。。。

没想到运行的程序不是我想要的样子

以下是我的全部代码,我的资源文件我感觉并没有介入编译过程:
[code=C/C++][/code]
 

这是.cpp

#include <Windows.h>
#include <stdio.h>
#include "8-1.h"

//窗口函数声明
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) //入口函数(主函数)
{
 //定义窗口类
 WNDCLASS wndclass;
 wndclass.hInstance = hInstance;//当前应用程序实例句柄
 wndclass.hbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH);//窗口背景色为灰色
 wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);//窗口采用箭头光标
 wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为默认图标
 wndclass.lpszClassName = "My first windows";//窗口类名
 wndclass.lpszMenuName =NULL;//窗口中无菜单
 wndclass.lpfnWndProc = WndProc;//该窗口的处理函数为MyProc
 wndclass.cbClsExtra = 0;//窗口类无扩展
 wndclass.cbWndExtra = 0;//该窗口实例无扩展
 wndclass.style = CS_HREDRAW | CS_VREDRAW;//该窗口的类型
 if(!RegisterClass(&wndclass)) //注册窗口类
  return 0;
 //创建窗口
 HWND hwnd = CreateWindow(
  "My first windows" //窗口类名
  ,"我的第一个窗口程序" //窗口实例的标题名
  ,WS_OVERLAPPEDWINDOW //窗口的风格
  ,CW_USEDEFAULT
  ,CW_USEDEFAULT //窗口左上角坐标为默认值
  ,CW_USEDEFAULT
  ,CW_USEDEFAULT //窗口的高度和宽度为默认值
  ,NULL //此窗口没有父窗口
  ,NULL //此窗口没有主菜单
  ,hInstance //创建此窗口应用程序的当前句柄
  ,NULL //不使用该值
  );
 ShowWindow(hwnd,SW_NORMAL);//显示窗口
 UpdateWindow(hwnd);//绘制用户区
 //消息循环
 MSG msg;
 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 return 1;//程序终止时将信息返回系统
}

//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 HMENU hmenu;
 HMENU haddmenu;
 switch(message)
 {
 case WM_COMMAND: //处理菜单消息
  switch(LOWORD(wParam))
  {
  case IDM_ADDMENU: //在主菜单中添加弹出式"统计计算"菜单
  hmenu = GetMenu(hwnd); //获取主菜单句柄
  haddmenu = CreateMenu(); //动态创建菜单
  //在创建的菜单中增加菜单项
  AppendMenu(haddmenu, MF_ENABLED, IDM_QIUHE, "求和(&S)");
  AppendMenu(haddmenu, MF_ENABLED, IDM_FANGCHA, "方差(&F)");
  AppendMenu(haddmenu, MF_ENABLED, IDM_PINGJUNZHI, "平均值(&A)");
  AppendMenu(haddmenu, MF_ENABLED, IDM_JUNFANGGEN, "均方根(&J)");
  //将创建的弹出式菜单插入主菜单中
  InsertMenu(hmenu, 2, MF_POPUP|MF_BYPOSITION, (UINT)haddmenu,
  "统计计算(&C)");
  //相应改变菜单中有关统计计算菜单项的属性
  EnableMenuItem(hmenu, IDM_ADDMENU, MF_GRAYED);
  EnableMenuItem(hmenu, IDM_DELMENU, MF_ENABLED);
  DrawMenuBar(hwnd); //重新显示窗口菜单
  break;
  case IDM_DELMENU: //从主菜单中删除弹出式"统计计算"菜单
  hmenu=GetMenu(hwnd);
  DeleteMenu(hmenu, 2, MF_BYPOSITION); //删除"统计计算"菜单
  //相应改变“文件”菜单中有关统计计算菜单项的属性
  EnableMenuItem(hmenu, IDM_ADDMENU, MF_ENABLED);
  EnableMenuItem(hmenu, IDM_DELMENU, MF_GRAYED);
  DrawMenuBar(hwnd); //重新显示窗口菜单
  break;
  case IDM_EXIT:
  SendMessage(hwnd, WM_DESTROY, 0, 0);
  break;
  }
  break;
 case WM_DESTROY:
  PostQuitMessage(0); //调用PostQuitMessage 发出WM_QUIT 消息
 default:
  return DefWindowProc(hwnd, message, wParam, lParam); //系统默认处理函数
 }
 return 0;
}

 

这是.h

#ifndef MENU_1_H 


#define MENU_1_H
#define IDM_ADDMENU 15
#define IDM_DELMENU 16
#define IDM_EXIT 17
#define IDM_HELP 22
#define IDM_QIUHE 23
#define IDM_FANGCHA 24
#define IDM_PINGJUNZHI 25
#define IDM_JUNFANGGEN 26
#endif


 

这是.rc

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
/////////////////////////////////////////////////////////////////////////////
// 中文(简体,中国) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)

/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

MENU MENU
BEGIN
  POPUP "文件(&F)"
  BEGIN
  MENUITEM "创建统计计算菜单项(&P)\t Ctrl+P", IDM_ADDMENU
  MENUITEM "删除统计计算菜单项(&D)\t Ctrl+D", IDM_DELMENU, GRAYED
  MENUITEM SEPARATOR
  MENUITEM "退出(&X) \t Ctrl+X", IDM_EXIT
  END
  MENUITEM "帮助(&H)", IDM_HELP
END


/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//

MENU ACCELERATORS
BEGIN
  "^P", IDM_ADDMENU, ASCII  
  "^D", IDM_DELMENU, ASCII  
  "^X", IDM_EXIT, ASCII  
END


#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
  "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
  "\0"
END

3 TEXTINCLUDE 
BEGIN
  "\r\n"
  "\0"
END

#endif // APSTUDIO_INVOKED

#endif // 中文(简体,中国) resources
/////////////////////////////////////////////////////////////////////////////

 

#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

 

真心希望能有人帮我解决一下!!!纠结一天了。。。



[解决办法]
wndclass.lpszMenuName =NULL;//窗口中无菜单

注册窗口类的时候都没有指定资源名
[解决办法]
要显示菜单要么在CreateWindow里面的那个参数指定,要么在WNDCLASS指定名字,还可以在WM_CREATE里面用SetMenu(hwnd, hMenu)
[解决办法]
而且WinMain应该返回msg.wParam

热点排行