VS2012+C语言+图形界面窗口+读取TXT文件+显示

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ID_TIMER 1
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); //声明回调函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) //主函数
{
    WNDCLASS wnd;
    wnd.style = CS_HREDRAW | CS_VREDRAW;
    wnd.lpfnWndProc = WindowProc;   //与回调函数关联
    wnd.cbClsExtra = 0;
    wnd.cbWndExtra = 0;
    wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);    //程序图标
    wnd.hCursor = LoadCursor(NULL, IDC_ARROW);  //鼠标样式
    wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    //背景颜色
    wnd.lpszMenuName = NULL;
    wnd.lpszClassName = TEXT("window");
    wnd.hInstance = hInstance;   //窗口句柄
    if (!RegisterClass(&wnd))   //注册窗口类
    {
        MessageBox(NULL, "register fail", "errorMsg", 0);
        return 0;
    }
    HWND hwnd;
    int x_screen;
    //int   y_screen;
    x_screen = GetSystemMetrics(SM_CXSCREEN);//屏幕宽度
    //y_screen = GetSystemMetrics(SM_CYSCREEN);//屏幕高度
    /*创建窗口类,
    WS_EX_TOOLWINDOW,使得程序不在任务栏显示,即程序仅有一个窗口,无其他桌面显示,可在进程中看到;
    TEXT("偷得浮生半日闲"),窗口名称,不过本程序不显示边框,所以看不到;
    WS_POPUPWINDOW,使得程序无边框,即只有客户区;
    接下来四个参数:第一、二个确定程序的左上角X,Y位置,
    第三、四个确定程序的长、宽
    */
    hwnd = CreateWindowEx(WS_EX_TOOLWINDOW,TEXT("window"),TEXT("偷得浮生半日闲"),WS_POPUPWINDOW,x_screen - 532 ,10, 512,192, NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd, nShowCmd); //  显示窗口
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))    //消息循环
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.lParam;
}
char* ReplaceString(const char *srcStr, const char *src, const char *dest)  //替换字符串,获得文件路径
{
    char *ptr;
    int len = strlen(srcStr);
    ptr = (char*)malloc(sizeof(char)*len+1);
    strcpy(ptr, srcStr);
    for ( int i=0; i<len; ++i )
    {
        if ( 0==strncmp(&ptr[i], src, strlen(src)) )    //查找想要被替换字符串的起始位置
        {
            strncpy(&ptr[i], dest, strlen(dest));   //替换字符串的长度为目标字符串的长度
        }
    }
    ptr[len+strlen(dest)-strlen(src)] = ‘\0‘;   //计算出字符串结束位置,并加上‘/0’
    return ptr;
}
void ReadFile(HDC hdc)  //读取文件,并打印输出
{
    TCHAR szPath[1024];
    GetModuleFileName( NULL, szPath, 1024 );    //获取当前程序的路径
    const char * pFileName = ReplaceString(szPath,"tx.exe","FILE.file");    //替换字符串,得到想要读取文件的路径,tx.exe为当前程序名称,FILE.file为程序要读取文件的名称
    FILE * pFile;
    int Row = 0;    //得到文件中的总行数
    char str[1024]; //用于储存最终要输出的字符串
    char strTry[1024];  //用于储存计算文件行数时读取到的内容
    pFile=fopen(pFileName,"rt");    //以文本方式打开文件
    if ( NULL == pFile )    //判断打开文件成功否
    {
        MessageBox(NULL, "Open File Fail !", "errorMsg", 0);
        Sleep(5000);    //程序睡眠5秒
        PostQuitMessage(0); //退出程序
        return;
    }
    while (!feof(pFile))    //只要文件未读完,就一次一行的读取
    {
        ZeroMemory(strTry, sizeof(strTry)); //清空strTry中的内容
        fgets(strTry,1024,pFile);   //读取一行内容到strTry中去
        Row++;
    }
    fclose(pFile);  //关闭文件流
    int RowCount = rand()%Row;  //随机得到文件中的某一行
    pFile=fopen(pFileName,"rt");
    while (!feof(pFile) && RowCount >= 0)    //当读取到那一行时,进行操作
    {
        ZeroMemory(str, sizeof(str));
        fgets(str,1024,pFile);  //读取随机得到的一行
        //fscanf(pFile, "%s", str);
        RowCount--;
    }
    fclose(pFile);
    char PrintStr[128] = {0};   //用于暂存将要打印的一行字符串
    for(int i = 0; i < 68; i++)  //屏幕上输出的第一行字符,要空两格,具体情况根据客户区的长度决定
    {
        PrintStr[i] = str[i];
        TextOut ( hdc , 30 , 10 , PrintStr , strlen ( PrintStr ) ) ;    //在屏幕上显示字符
    }
    ZeroMemory(PrintStr, sizeof(PrintStr));
    for(int CountLine = 0; CountLine < 7; CountLine ++)  //第二行起不用空格,为满行输出,CountLine < 7,这也要根据客户区的高度决定的
    {
        for(int i = 0; i < 70; i++)
        {
            PrintStr[i] = str[i+68+70*CountLine];
            TextOut ( hdc , 0 , 10+20*(CountLine+1) , PrintStr , strlen ( PrintStr ) ) ;
        }
        ZeroMemory(PrintStr, sizeof(PrintStr));
    }
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)  //回调函数具体实现
{
    HDC hdc;
    PAINTSTRUCT ps;
    HFONT hFont;
    switch (msg)
    {
    case WM_CREATE:
        srand((unsigned) time(NULL));   //生成随机函数种子,使得生成随机数时更加随机
        SetTimer(hwnd,ID_TIMER,20000,NULL); //定时器,20000为20秒,每20秒执行一次 case WM_TIMER:下的内容
        return 0;
    case WM_TIMER:
        KillTimer(hwnd,ID_TIMER);   //撤消计时器
        PostQuitMessage(0); //退出程序
        return 0;
    case WM_PAINT:
        hdc=BeginPaint ( hwnd,&ps );
        hFont = CreateFont(20,  //字符的高度值
            0,  //如果此值为0,字体映射器选择一个closest match值
            0,  //指定移位向量和设备X轴之间的一个角度
            0,  //指定每个字符的基线和设备X轴之间的角度
            400,    //指定字体的权值
            FALSE,  //设置为斜体
            FALSE,  //增加下划线
            FALSE,  //增加删除线
            GB2312_CHARSET, //指定字符集
            OUT_DEFAULT_PRECIS, //指定输出精度
            CLIP_DEFAULT_PRECIS,    //指定裁剪精度
            DEFAULT_QUALITY,    //指向输出质量
            FIXED_PITCH|FF_MODERN,  //指定字体间距和字体族
            "微软雅黑");    //指定字体的字样名
        SelectObject(hdc,hFont);  //选入字体
        //TextOut ( hdc , 30 , 10 , str , strlen ( str ) ) ;
        ReadFile(hdc);  //读取文件,并在屏幕上输出
        DeleteObject(hFont);    //删除画笔
        EndPaint ( hwnd,&ps );
        return 0;
    /*case WM_SIZE:
        return 0 ;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;*/
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}

VS2012+C语言+图形界面窗口+读取TXT文件+显示,布布扣,bubuko.com

时间: 2024-10-25 11:02:31

VS2012+C语言+图形界面窗口+读取TXT文件+显示的相关文章

Javascript写入txt和读取txt文件的方法

文章主要介绍了Javascript写入txt和读取txt文件的方法,需要的朋友可以参考下1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码 代码如下: Var fso=new ActiveXObject(Scripting.FileSystemObject); 创建一个可以将文件翻译成文件流的对象. 第二步:用于创建一个textStream 对象 括号里边有三个属性 1. 文件的绝对路径 2. 文件的常数 只读=1,只写=2 ,追加=8 等权限.(Fo

Selenium+Python参数化:读取TXT文件

概述 从Selenium模块化一文中,可以看出参数化的必要性,本文来介绍下读取外部txt文件的方法. 如何打开文件 打开文件有以下两个函数可以应用: 1.open(file_name,access_mode) file_name: 文件路径及名称: access_mode :访问方式,具体参数如下,,未提供参数,则默认为r: r:表示读取: w:表示写入: a:表示添加: +: 表示读写: b:表示2进制访问; 2.file函数 file()内建函数它的功能等于open(),如下根据文档说明可知

Python读取txt文件

Python读取txt文件,有两种方式: (1)逐行读取 1 data=open("data.txt") 2 line=data.readline() 3 while line: 4 print line 5 line=data.readline() (2)一次全部读入内存 1 data=open("data.txt") 2 for line in data.readlines(): 3 print line

JAVA读取TXT文件、新建TXT文件、写入TXT文件

1.创建TXT文件 按照正常的逻辑写就好 先定义一个文件给定一个路径——>判断这个路径上这个文件存不存在——>若不存在则建立,try/catch根据程序提示自动生成就好 2.读取TXT文件 思路1: 获得一个文件路径 以这个路径新建一个文件,判断这个文件是否以正常的文件格式存在着 以这个路径创建一个阅读缓冲器:FileInputStream——>InputStreamReader——>BufferedReader 逐行判断内容是否为空,将读取结果累加到一个字符串(result)上

Flex读取txt文件里的内容报错

Flex读取txt文件里的内容 1.详细错误例如以下 2.错误原因 读取文件不存在 var file:File = new File(File.applicationDirectory.nativePath+"/phone.txt"); 3.解决的方法 将文件导入进去

C#读取txt文件

       用C#读取txt文件时,当txt中数据的分隔符是空格,而且空格数量不等时,如果直接用Split直接对每行进行分隔,那么list的数目会比每行的列数多,并不是真实的每行的列数.这时要把不等数目的空格全变成1个空格,这样计数才正确.代码如下: public static List<string>split(string s,char splitchar=' ') { return s.Split(splitchar).Select(p=>p.Trim()).Where(p=&g

java读取TXT文件的方法

java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了.接下来需要解读成乙方可以理解的东西 既然你使用了FileInputStream().那么对应的需要使用InputStreamReader()这个方法进行解读刚才装进来内存当中的数据 解读完成后要输出

Java后台按行读取txt文件

java读取txt文件内容.可以作如下理解: 首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了. 通过这条线路读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了.接下来需要解读成乙方可以理解的东西 既然你使用了FileInputStream().那么对应的需要使用InputStreamReader()这个方法进行解读刚才装进来内存当中的数据 解读完成后要输出

关于C语言中使用fread()读取整个文件的心得

#include <stdio.h> #include <stdlib.h> int main(void) {     struct testF{         int a;         int b;         float c;     };          struct testF struct1[5]={{5, 4, 5.4}, {4, 3, 4.3}, {3, 2, 3.2}, {2, 1, 2.1}, {1, 0, 1.01}};     FILE *fpW;