设为首页收藏本站

如鹏网

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: 杨中科

【教学视频】《C语言也能干大事》第七节:自己动手写音乐贺卡、计算器

[复制链接]

3

主题

0

好友

5508

积分

论坛元老

阿妹你看,上帝压狗。

Rank: 8Rank: 8

发表于 2009-10-5 09:49:26 |显示全部楼层
主要代码:

  1. ////////////////////////////////////////////////////////////////////////////////
  2. // Main_OnCommand
  3. void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
  4. {
  5. switch(id)
  6. {
  7. case IDC_BTN1:
  8. calc(hwnd);
  9. break;
  10. case IDC_BTN2:
  11. TCHAR cNumI[256];
  12. GetDlgItemText(hwnd,IDC_EDTNUMI,cNumI,sizeof(cNumI)/sizeof(TCHAR));
  13. int numi = atoi(cNumI);
  14. TCHAR cNumB[256];
  15. itoa(numi,cNumB,2);
  16. SetDlgItemText(hwnd,IDC_EDTNUMB,cNumB);
  17. break;
  18. default:break;
  19. }

  20. }
复制代码
未命名.jpg

0

主题

0

好友

620

积分

高级会员

Rank: 4

发表于 2009-10-15 21:19:45 |显示全部楼层
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

HINSTANCE appInstanc=hInstance;//这个变量在main.h头文件中定义为全局变量
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, Main_Proc);
    return(0);
}
我想问一下,这里兰色的那个appInstance这个变量应该是定义在Winmain这个函数中的,也就是一个局部变量,怎么可以把它extern到整个程序中,虽然我也运行成功了,但还是有点想不通.

如果是这样,在winmain的前面定义,但编译报错说没有定义到hInstance这个变量


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


    DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, Main_Proc);
    return(0);
}

0

主题

0

好友

620

积分

高级会员

Rank: 4

发表于 2009-10-16 10:42:52 |显示全部楼层
原帖由 conce 于 2009-7-11 19:16 发表
郁闷了 一下午了  
才发现了 原来是 读取数字的时候太懒了 ,复制了 上一句代码,该参数 没有改全。  哎


哭死我了,55555555555555555555我也是,刚刚郁闷呢,看着看着就看到你这个,于是回过去看自己的,哎,也是没改全,一直读取的第一个数,哎哎,花了好长时间,真是不应该..

0

主题

0

好友

72

积分

注册会员

Rank: 2

发表于 2009-10-16 20:31:57 |显示全部楼层

应用程序的实例句柄

做贺卡的时候 PlaySound(TEXT("IDR_MYMUSIC"),hInstance,SND_RESOURCE|SND_ASYNC );
在前面定义有 INSTANCE hInstance;
并没有按杨老师说的那样运用全局变量,程序也可以运行成功,这是为什么?

0

主题

0

好友

119

积分

注册会员

Rank: 2

发表于 2009-12-23 11:59:32 |显示全部楼层

0

主题

0

好友

1

积分

新手上路

Rank: 1

发表于 2009-12-30 19:08:32 |显示全部楼层

0

主题

0

好友

63

积分

注册会员

Rank: 2

发表于 2010-1-13 14:05:37 |显示全部楼层
Now!Acting!

27

主题

0

好友

1131

积分

金牌会员

Rank: 6Rank: 6

发表于 2010-1-15 15:03:20 |显示全部楼层
计算器2.0
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)//对话框初始化
{
    // Set app icons
    HICON hIcon = LoadIcon((HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE) ,MAKEINTRESOURCE(IDI_ICONAPP));
    SendMessage(hwnd, WM_SETICON, TRUE,  (LPARAM)hIcon);
    SendMessage(hwnd, WM_SETICON, FALSE, (LPARAM)hIcon);
    SendDlgItemMessage(hwnd,IDC_CBO1,CB_ADDSTRING,0,(LPARAM)TEXT("+"));
    SendDlgItemMessage(hwnd,IDC_CBO1,CB_ADDSTRING,0,(LPARAM)TEXT("-"));
    SendDlgItemMessage(hwnd,IDC_CBO1,CB_ADDSTRING,0,(LPARAM)TEXT("*"));
    SendDlgItemMessage(hwnd,IDC_CBO1,CB_ADDSTRING,0,(LPARAM)TEXT("/"));
    //
    // Add initializing code here
    //
   
    return TRUE;
}
////////////////////////////////////////////////////////////////////////////////
//  Main_OnCommand
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)//按钮
{
    switch(id)
    {
        case IDC_BTN1://四则运算
        {
         int index;
            index = SendDlgItemMessage(hwnd,IDC_CBO1,CB_GETCURSEL,0,0);//求项目的索引//
            if(-1==index)//如果索引值为-1表示没选择操作符,就不用执行四则运算了,直接退出//
            {
             MessageBox(NULL,TEXT("没选择操作符!"),TEXT("错误"),MB_OK|MB_ICONSTOP);
             break;
            }
            ///////////////////////////下面区域执行四则运算/////////////////////////////
            char str1[255],str2[255],str3[255];
            float n1=0,n2=0,result=0;
            bool error=FALSE;//除数不为0
            GetDlgItemText(hwnd,IDC_EDT1,str1,254);//获取第一个文本里的串
         GetDlgItemText(hwnd,IDC_EDT2,str2,254);//获取第二个文本里的串
            n1=atof(str1);//转换数值项1
            n2=atof(str2);//转换数值项2
            
         switch(index)//判断项目索引
         {
          case 0://加
          {
           result=n1+n2;
           
           break;
           
          }
          case 1://减
          {
           result=n1-n2;
           
           break;
           
          }
          case 2://乘
          {
           result=n1*n2;
           
           break;
           
          }
          case 3://除
          {
           if(0==n2)
           {
            MessageBox(NULL,TEXT("被除数不能为0!"),TEXT("错误"),MB_OK);
            error=TRUE;//除数为0
           }
           else
           {
               result=n1/n2;
           }
           
           break;
           
          }
          default:
          {
           break;
          }
         
          break;
         
         }
         if(FALSE==error)
         {
          gcvt(result,6,str3);
             SetDlgItemText(hwnd,IDC_EDT3,str3);
         }
         break;
        }
        
///////////////////////////////////上面为四则运算区域////////////////////////////////////////
        case IDC_BTN2://转换成二进制
        {
         char str4[255];
         GetDlgItemText(hwnd,IDC_EDT4,str4,254);//获取文本里的串
         if(0==str4[0])//当用户没输入数字或输入时,退出,不执行下面转换
         {
          MessageBox(NULL,TEXT("内容不能为空"),TEXT("错误"),MB_OK);
          break;
         }
         int i=0,sign=0,n3=atoi(str4);//转换串为数值
         itoa(n3,str4,2);
         SetDlgItemText(hwnd,IDC_EDT5,str4);
         
         break;
         
        }
           
    }
}

calc2.0.rar

19.03 KB, 下载次数: 16

0

主题

0

好友

72

积分

注册会员

Rank: 2

发表于 2010-1-21 12:16:31 |显示全部楼层

0

主题

0

好友

1

积分

新手上路

Rank: 1

发表于 2010-6-2 10:58:07 |显示全部楼层
你是怎样实现上面的界面的
教教我吧
您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|如鹏网 ( 粤ICP备09013919号 )   360网站安全检测平台

GMT+8, 2012-5-19 16:06

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部