第一节 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.h
BOOL 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函数中调用