主题:研究了几天了,难死我了,高手帮帮忙
/* 要创建一个窗口,包含一个文件(IDR_TYPER)菜单,文件菜单下有关闭(ID_FILE_EXIT)和打开(ID_OPEN)当单击打开时会打开一个打开的通用对话框,在选择文本文件后,本想让文件内容显示在窗口中,但总是不能正常显示,高手来帮忙啊*/
#include <windows.h>
#include "resource.h"
#include <string>
// 窗口函数的函数原形
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
//打开文件函数
BOOL OpFile(char szFileName[256]);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char szClassName[] = "MainWClass";
WNDCLASSEX wndclass;
// 用描述主窗口的参数填充WNDCLASSEX结构
wndclass.cbSize = sizeof(wndclass); // 结构的大小
wndclass.style = CS_HREDRAW|CS_VREDRAW; // 指定如果大小改变就重画
wndclass.lpfnWndProc = MainWndProc; // 窗口函数指针
wndclass.cbClsExtra = 0; // 没有额外的类内存
wndclass.cbWndExtra = 0; // 没有额外的窗口内存
wndclass.hInstance = hInstance; // 实例句柄
wndclass.hIcon = ::LoadIcon(hInstance,
(LPSTR)IDI_TYPER); // 使用自定义图标
wndclass.hCursor = ::LoadCursor(NULL,
IDC_ARROW); // 使用预定义的光标
wndclass.hbrBackground =
(HBRUSH)(COLOR_3DFACE + 1); // 使用预定义画刷
wndclass.lpszMenuName = (LPSTR)IDR_TYPER;
wndclass.lpszClassName = szClassName ; // 窗口类的名称
wndclass.hIconSm = NULL; // 没有类的小图标
// 注册这个窗口类
::RegisterClassEx(&wndclass);
// 创建主窗口
HWND hwnd = ::CreateWindowEx(
WS_EX_CLIENTEDGE,
szClassName, // lpClassName,类名
"My first Window!", // lpWindowName,标题
WS_OVERLAPPEDWINDOW, // dwStyle,窗口风格
CW_USEDEFAULT, // X,初始 X 坐标
CW_USEDEFAULT, // Y,初始 Y 坐标
CW_USEDEFAULT, // nWidth,宽度
CW_USEDEFAULT, // nHeight,高度
NULL, // hWndParent,父窗口句柄
NULL, // hMenu,菜单句柄
hInstance, // hlnstance,程序实例句柄
NULL) ; // lpParam,用户数据
if(hwnd == NULL)
{
::MessageBox(NULL, "创建窗口出错!", "error", MB_OK);
return -1;
}
// 显示窗口,刷新窗口客户区
::ShowWindow(hwnd, nCmdShow);
::UpdateWindow(hwnd);
// 从消息堆中取出消息
MSG msg;
while(::GetMessage(&msg, NULL, 0, 0)
{
// 转化键消息
::TranslateMessage(&msg);
// 将消息发送到相应的窗口函数
::DispatchMessage(&msg);
}
// 当GetMessage返回0时程序结束
return msg.wParam;
}
//两个全局变量
char* filebegin=""; //显示内容
char* fileread=(char*)malloc(sizeof(char));//打开文件后文件内容存储地点
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// str对象用于保存窗口客户区显示的字符串
// 为了使用string类,应该包含头文件:“#include <string>”
switch (message)
{
case WM_CREATE:
{
// 设置窗口的标题
::SendMessage(hwnd, WM_SETTEXT, 0, (long)"作者制作——记事本");
return 0;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_OPEN:
{
//打开文件对话框的显示
char FileNameRead[256]="";
OPENFILENAME file={0};
file.lStructSize =sizeof(file);
file.lpstrFile =FileNameRead;//打开文件的文件名
file.nMaxFile =256;
file.lpstrFilter ="Text File(*.txt)\0*.txt\0*.*\0\0";
file.nFilterIndex =1;
::GetOpenFileName(&file);//显示对话框
::MessageBox (NULL,fileread,"filebegin",MB_OK); //打开文件过程
LPDWORD dsize=(DWORD*)malloc(sizeof(DWORD));
//打开文件
HANDLE hFile=::CreateFile (
FileNameRead,GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
//判断文件是否打开成功
if(hFile==INVALID_HANDLE_VALUE)
{
::MessageBox (NULL,"打开文件失败!","操作提示",MB_OK);
}
else
::MessageBox (NULL,"打开文件成功!","操作提示",MB_OK); //读取文件
int a=ReadFile(hFile,fileread,
GetFileSize(hFile,NULL),dsize,NULL);
if(a==0)
::MessageBox (NULL,"读取文件失败!","操作提示",MB_OK);
else
::MessageBox (NULL,"读取文件成功!","操作提示",MB_OK);
return 0;
}
case ID_FILE_EXIT:
// 向hwnd指定的窗口发送一个WM_CLOSE消息。
int nSel=::MessageBox (NULL,"确定要退出?","记事本",
MB_YESNOCANCEL|MB_ICONQUESTION|MB_DEFBUTTON3);
if(nSel==IDYES)
::SendMessage(hwnd, WM_CLOSE, 0, 0);
else
::SendMessage(hwnd, WM_PAINT, 0, 0);
break;
}
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = ::BeginPaint(hwnd, &ps);
// 设置输出文本的背景颜色和文字颜色
::SetTextColor(hdc, RGB(255, 0, 0));
::SetBkColor(hdc, ::GetSysColor(COLOR_3DFACE));
//输出文本
::TextOut(hdc, 0, 0, fileread, sizeof(fileread));
::EndPaint(hwnd, &ps);
return 0; }
case WM_CHAR:
{
// 保存ansi码
filebegin = filebegin + char(wParam);
// 使整个客户区无效
::InvalidateRect(hwnd,NULL,0);
return 0;
}
case WM_DESTROY: // 正在销毁窗口
// 向消息队列投递一个WM_QUIT消息,促使GetMessage函数返回0,结束消息循环
::PostQuitMessage(0) ;
return 0 ;
}
// 将我们不处理的消息交给系统做默认处理
return ::DefWindowProc(hwnd, message, wParam, lParam);
}
#include <windows.h>
#include "resource.h"
#include <string>
// 窗口函数的函数原形
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
//打开文件函数
BOOL OpFile(char szFileName[256]);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char szClassName[] = "MainWClass";
WNDCLASSEX wndclass;
// 用描述主窗口的参数填充WNDCLASSEX结构
wndclass.cbSize = sizeof(wndclass); // 结构的大小
wndclass.style = CS_HREDRAW|CS_VREDRAW; // 指定如果大小改变就重画
wndclass.lpfnWndProc = MainWndProc; // 窗口函数指针
wndclass.cbClsExtra = 0; // 没有额外的类内存
wndclass.cbWndExtra = 0; // 没有额外的窗口内存
wndclass.hInstance = hInstance; // 实例句柄
wndclass.hIcon = ::LoadIcon(hInstance,
(LPSTR)IDI_TYPER); // 使用自定义图标
wndclass.hCursor = ::LoadCursor(NULL,
IDC_ARROW); // 使用预定义的光标
wndclass.hbrBackground =
(HBRUSH)(COLOR_3DFACE + 1); // 使用预定义画刷
wndclass.lpszMenuName = (LPSTR)IDR_TYPER;
wndclass.lpszClassName = szClassName ; // 窗口类的名称
wndclass.hIconSm = NULL; // 没有类的小图标
// 注册这个窗口类
::RegisterClassEx(&wndclass);
// 创建主窗口
HWND hwnd = ::CreateWindowEx(
WS_EX_CLIENTEDGE,
szClassName, // lpClassName,类名
"My first Window!", // lpWindowName,标题
WS_OVERLAPPEDWINDOW, // dwStyle,窗口风格
CW_USEDEFAULT, // X,初始 X 坐标
CW_USEDEFAULT, // Y,初始 Y 坐标
CW_USEDEFAULT, // nWidth,宽度
CW_USEDEFAULT, // nHeight,高度
NULL, // hWndParent,父窗口句柄
NULL, // hMenu,菜单句柄
hInstance, // hlnstance,程序实例句柄
NULL) ; // lpParam,用户数据
if(hwnd == NULL)
{
::MessageBox(NULL, "创建窗口出错!", "error", MB_OK);
return -1;
}
// 显示窗口,刷新窗口客户区
::ShowWindow(hwnd, nCmdShow);
::UpdateWindow(hwnd);
// 从消息堆中取出消息
MSG msg;
while(::GetMessage(&msg, NULL, 0, 0)
{
// 转化键消息
::TranslateMessage(&msg);
// 将消息发送到相应的窗口函数
::DispatchMessage(&msg);
}
// 当GetMessage返回0时程序结束
return msg.wParam;
}
//两个全局变量
char* filebegin=""; //显示内容
char* fileread=(char*)malloc(sizeof(char));//打开文件后文件内容存储地点
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// str对象用于保存窗口客户区显示的字符串
// 为了使用string类,应该包含头文件:“#include <string>”
switch (message)
{
case WM_CREATE:
{
// 设置窗口的标题
::SendMessage(hwnd, WM_SETTEXT, 0, (long)"作者制作——记事本");
return 0;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_OPEN:
{
//打开文件对话框的显示
char FileNameRead[256]="";
OPENFILENAME file={0};
file.lStructSize =sizeof(file);
file.lpstrFile =FileNameRead;//打开文件的文件名
file.nMaxFile =256;
file.lpstrFilter ="Text File(*.txt)\0*.txt\0*.*\0\0";
file.nFilterIndex =1;
::GetOpenFileName(&file);//显示对话框
::MessageBox (NULL,fileread,"filebegin",MB_OK); //打开文件过程
LPDWORD dsize=(DWORD*)malloc(sizeof(DWORD));
//打开文件
HANDLE hFile=::CreateFile (
FileNameRead,GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
//判断文件是否打开成功
if(hFile==INVALID_HANDLE_VALUE)
{
::MessageBox (NULL,"打开文件失败!","操作提示",MB_OK);
}
else
::MessageBox (NULL,"打开文件成功!","操作提示",MB_OK); //读取文件
int a=ReadFile(hFile,fileread,
GetFileSize(hFile,NULL),dsize,NULL);
if(a==0)
::MessageBox (NULL,"读取文件失败!","操作提示",MB_OK);
else
::MessageBox (NULL,"读取文件成功!","操作提示",MB_OK);
return 0;
}
case ID_FILE_EXIT:
// 向hwnd指定的窗口发送一个WM_CLOSE消息。
int nSel=::MessageBox (NULL,"确定要退出?","记事本",
MB_YESNOCANCEL|MB_ICONQUESTION|MB_DEFBUTTON3);
if(nSel==IDYES)
::SendMessage(hwnd, WM_CLOSE, 0, 0);
else
::SendMessage(hwnd, WM_PAINT, 0, 0);
break;
}
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = ::BeginPaint(hwnd, &ps);
// 设置输出文本的背景颜色和文字颜色
::SetTextColor(hdc, RGB(255, 0, 0));
::SetBkColor(hdc, ::GetSysColor(COLOR_3DFACE));
//输出文本
::TextOut(hdc, 0, 0, fileread, sizeof(fileread));
::EndPaint(hwnd, &ps);
return 0; }
case WM_CHAR:
{
// 保存ansi码
filebegin = filebegin + char(wParam);
// 使整个客户区无效
::InvalidateRect(hwnd,NULL,0);
return 0;
}
case WM_DESTROY: // 正在销毁窗口
// 向消息队列投递一个WM_QUIT消息,促使GetMessage函数返回0,结束消息循环
::PostQuitMessage(0) ;
return 0 ;
}
// 将我们不处理的消息交给系统做默认处理
return ::DefWindowProc(hwnd, message, wParam, lParam);
}