【对话框编程】C语言也能干大事系列课程源代码

来源:互联网 发布:shell脚本监控端口 编辑:程序博客网 时间:2024/06/05 16:32



第一节 MessageBox程序

窗口恶搞程序:

【编译器】C-Free 5.0

#include <windows.h>int APIENTRY WinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPSTR     lpCmdLine,                     int       nCmdShow){ /* TODO: Place code here.*/ int a,b = 4; while(IDRETRY == b) { a = MessageBox(NULL,TEXT("你是好人吗"),TEXT("窗口"),MB_YESNO);    if(IDNO == a)    {    b = MessageBox(NULL,TEXT("看你就不像好人,点击确定开始格式化C盘!"),TEXT("窗口"),MB_OK|MB_ICONINFORMATION);    }    else    {    b = MessageBox(NULL,TEXT(""),TEXT("窗口"),MB_RETRYCANCEL);     }    if(IDOK == b)    {    MessageBox(NULL,TEXT("C盘格式化完毕!"),TEXT("窗口"),MB_OK);    }}return 0;}


第二节 对话框程序

【编译器】Visual Studio 2010

#include "stdafx.h"#include "test2.h"#include "Resource.h"int APIENTRY _tWinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPTSTR    lpCmdLine,                     int       nCmdShow){DialogBox(hInstance,MAKEINTRESOURCE(IDD_ABOUTBOX),NULL,NULL);return 0;}

第三节 简易加法计算器

【编译器】Visual Studio 2010

【问题】EDIT3控件输出乱码

头文件添加如下声明:

//SimpleAddPro.hBOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);void Main_OnClose(HWND hwnd);


另外标准头文件添加:

//stdafx.h#include <windowsx.h>

主文件:

// SimpleAddPro.cpp : 定义应用程序的入口点。#include "stdafx.h"#include "SimpleAddPro.h"#include "Resource.h"int APIENTRY _tWinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPTSTR    lpCmdLine,                     int       nCmdShow){DialogBox(hInstance,MAKEINTRESOURCE(IDD_ABOUTBOX),NULL,Main_Proc);return 0;}BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){switch(uMsg){  HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);  HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);  HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);}return FALSE;}//对话框窗口初始化函数:BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){return TRUE;}void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){switch(id){case IDC_OK:  {  TCHAR str1[256];  TCHAR str2[256];  GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));  GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2));  int n1=_wtoi(str1);  int n2=_wtoi(str2);  int n3=n1+n2;  TCHAR str3[256];  //wsprintf(str3,"%d",n3);  _itow(n3,str3,10);  SetDlgItemText(hwnd,IDC_EDIT3,str3);  }  break;default:  break;}}void Main_OnClose(HWND hwnd){EndDialog(hwnd, 0);}

问题解决!VC++6.0中的atoi函数和itoa函数在VS2010中始终存在各种问题,原因及解决方法如下:
1.vs 2010 默认字符集是使用 Unicode 字符集,而vc++ 6.0 没有Unicode 字符集。
2.vc++ 6.0 char类型采用的是单字节存储形式,而vs 2010为了兼容发展,采用了2字节存储形式那么,在vs 2010中字符串与数字互换的写法是怎么样的呢,其实也简单,我们了解VS2010的char的存储机制后,我们可用宽字节的宏来转换,即用 wchar_t(TCHAR)代替 char 字义字符串,用_wtoi 字符串转整数,用_itow 整数转字符串就可以了


Dialog控件略。


第四节 简易计算器改进
数值是否合法判断函数:

BOOL IsInt(TCHAR* str){int i=_wtoi(str);TCHAR strtemp[256];wsprintf(strtemp,"%i",i);if(strcmp(str,strtemp)!=0){return FALSE;}else{return TRUE;}}

第四节 简易计算器2.0

【编译器】Visual Studio 2010

此版本在之前的版本上修改,以下为修改内容:

1.初始化函数添加Combo下拉选项

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){HWND hwndCombo1 = GetDlgItem(hwnd,IDC_COMBO1);//获取Combo句柄ComboBox_InsertString(hwndCombo1,-1,TEXT("+"));ComboBox_InsertString(hwndCombo1,-1,TEXT("-"));ComboBox_InsertString(hwndCombo1,-1,TEXT("*"));ComboBox_InsertString(hwndCombo1,-1,TEXT("/"));return TRUE;}

2.计算部分,替代1.0版本中的相加赋值语句

  HWND hwndCombo1 = GetDlgItem(hwnd,IDC_COMBO1);  int curIndex = ComboBox_GetCurSel(hwndCombo1);  switch(curIndex)  {  case 0:  {  n3 = n1+n2;  }  break;  case 1:  {  n3 = n1-n2;  }  break;  case 2:  {  n3 = n1*n2;  }  break;  case 3:  {  n3 = n1/n2;  }  break;  }

另外,Dialog主控件属性Center(窗口初始居中)、Maximize Box(最大化按钮)、Minimize Box(最小化按钮)等调节为Ture值可用。


第六节 定时器

时钟1.0

//回调函数void CALLBACK TimeProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTIME){SYSTEMTIME stLocal;//系统时间指针GetLocalTime(&stLocal);TCHAR strTime[256];wsprintf(strTime,TEXT("%d年%d月%d日 %d:%d:%d"),stLocal.wYear,stLocal.wMonth,stLocal.wDay,stLocal.wHour,stLocal.wMinute,stLocal.wSecond);SetDlgItemText(hwnd,IDC_EDITTIME,strTime);}BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){SetTimer(hwnd,0,1000,TimeProc);//定时器return TRUE;}


第七节 记事本和播放器

1.打开文件代码

case IDM_OPEN://打开{OPENFILENAME ofn;//结构体变量TCHAR szFile[MAX_PATH];ZeroMemory(&ofn,sizeof(ofn));ofn.lStructSize=sizeof(ofn);ofn.lpstrFile=(LP)szFile;ofn.lpstrFile[0]=TEXT('\0');ofn.nMaxFile=sizeof(szFile);ofn.lpstrFilter=TEXT("所有文件(*.*)\0*.*\0文本文档(*.txt)\0*.TXT\0");ofn.nFilterIndex=2;ofn.lpstrFileTitle=NULL;ofn.nMaxFileTitle=0;ofn.lpstrInitialDir=NULL;ofn.hwndOwner=hwnd;//父窗口ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST;if(GetOpenFileNameW(&ofn))//打开文件API,返回路径在szFile变量内,返回值类型为BOOL{FILE * fp = fopen(szFile,"r");//此部分无法在VS2010运行char line[256];fgets(line,sizeof(line),fp);fclose(fp);SetDlgItemText(hwnd,IDC_EDIT,line);}

2.对话框退出函数

case IDM_EXIT://退出{EndDialog(hwnd,0);}

3.RICH EDIT 2.0控件调用

LoadLibrary(TEXT("riched32.dll"));//在winMain函数中调用




0 0