怎么读取文本文件的内容到窗口的文本框或对话框里面?(非MFC)

怎么读取文本文件的内容到窗口的文本框或对话框里面?(非MFC)

问题描述:

做了一个纯c语言的窗口程序,没有用MFC!。
有另外一个串口程序接收的数据用fopen放到一个文本文件里面(有一个博主让我放CStatic里面,但是小不黑(白)表示不会弄),
现在的窗口程序做了一个文本框和对话框,请问该怎么把文本文件的内容放到这个里面来呢?对了因为接收串口数据的fopen是用的“w+”所以不会累积数据,这个文本框/对话框貌似还要一直进行更新或者循环读取?
对了,因为是一个小不黑(白),所以码的程序是自己乱拼的,要是看出来哪里有问题就跟我说,采纳或者打赏都可以。

#define _CRT_SECURE_NO_WARNINGS 1
#include <windows.h>
#include <tchar.h>


#define IDB_ONE        3301//按键1
#define IDB_TWO        3302//2
#define IDB_THREE    3303//3
#define IDB_FOUR    3304//4
#define IDB_Five    3305//5  窗口

LRESULT _stdcall WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);


HINSTANCE hg_app;//全局实例句柄
 
int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
 HWND hwnd;
 WNDCLASS wndcls;//设置这个结构的不同字段
 MSG msg;
 /*↓↓↓↓↓↓↓↓↓↓↓↓注册窗口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
 wndcls.cbClsExtra=0;
 wndcls.cbWndExtra=0;
 wndcls.hbrBackground=(HBRUSH)COLOR_WINDOW;
 wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);//图标
 wndcls.hIcon=LoadIcon(NULL,IDI_APPLICATION);
 wndcls.hInstance=hInstance;
 wndcls.lpfnWndProc=WndProc;//过程函数
 wndcls.lpszClassName=_T("ClassName");//ASCIIZ形式的窗口类名称的地址,每一个应用程序必须有一个窗口类,类名
 wndcls.lpszMenuName=_T("MenuName");//ASCIIZ形式的窗口名称的地址。该名称会显示在标题条上
 wndcls.style=CS_HREDRAW | CS_VREDRAW;
 RegisterClass(&wndcls);//注册这个窗口类型,wndcls
 /**/
 
 /*创建、显示窗口*/
 hwnd=CreateWindow(_T("ClassName"),//窗口类名,
_T("采集窗口"),//窗口标题
WS_OVERLAPPEDWINDOW,//窗口样式
0,//距离屏幕左上角横坐标
0,//距离屏幕左上角横坐标
1350,//窗口宽度
740,//窗口高度
NULL,//副窗口句柄
NULL,//菜单句柄
hInstance,//当前实例句柄
NULL);//指向一个值的指针,传递给窗口消息,一般为NULL


 ShowWindow(hwnd,SW_SHOWNORMAL);//显示窗口
 UpdateWindow(hwnd);//更新窗口

 /*CreateWindow创建一个模板*/

 
 /*消息循环,退出循环表示程序结束*/
 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);//翻译消息
  DispatchMessage(&msg);//分发消息给过程函数
 }
 /*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/ 
 
 return (int)msg.wParam;
}

  /*窗口过程函数*/  
LRESULT _stdcall WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 switch(uMsg)//循环
 {
   /*case WM_COMMAND:
    return DefWindowProc(hwnd, uMsg, wParam, lParam);*/
  break;
  case WM_CREATE:
        {
        
            
            //创建三个按钮
            CreateWindow(L"Button", L"开始", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                35, 10, 160, 60, hwnd, (HMENU)IDB_ONE, hg_app, NULL);
            CreateWindow(L"Button", L"暂停", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                35, 80, 160, 60, hwnd, (HMENU)IDB_TWO, hg_app, NULL);
            CreateWindow(L"Button", L"取消", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                35, 150, 160, 60, hwnd, (HMENU)IDB_THREE, hg_app, NULL);
            CreateWindow(L"Button", L"返回", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                35, 230, 160, 60, hwnd, (HMENU)IDB_FOUR, hg_app, NULL);
            //创建一个窗口,文本框
            
            CreateWindow(L"EDIT", L"无数据",WS_CHILD/*子窗口*/ | WS_VISIBLE/*初始可见*/ |  ES_MULTILINE/*多行*/|WS_BORDER/*细边框*/|WS_VSCROLL,
                250,10,400,300,hwnd,(HMENU)IDB_Five,hg_app,NULL);
            //创建一个窗口,对话框
            CreateWindow(L"EDIT", L"数据",WS_VISIBLE/*初始可见*/|WS_SIZEBOX |WS_CHILD/*子窗口*/|WS_DLGFRAME/*对话框*/|WS_BORDER,
            700,10,400,400,hwnd,(HMENU)IDB_Five,hg_app,NULL);
        }
  break;
  case WM_COMMAND:
        {
            switch(LOWORD(wParam))
            {
            case IDB_ONE:
                //MessageBox(hwnd, L"您点击了第一个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
                SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"正在进行");
                break;
            case IDB_TWO:
                //MessageBox(hwnd, L"您点击了第二个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
                SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"已暂停");
                break;
            case IDB_THREE:
                //MessageBox(hwnd, L"您点击了第三个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
                SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"已取消");   //窗口句柄, 应用程序发送此消息来设置一个窗口的文本
                
    
                break;
            default:
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
            }
  break;
 /* case WM_PAINT:
        {
        }
  break;*/
 case WM_DESTROY:
  PostQuitMessage(0);//关闭窗口,如果被拦截就关不了
  break;
 default:
  return DefWindowProc(hwnd, uMsg, wParam, lParam);//调用默认过程函数,刷新窗口
         }
 return 0;
 }
}

用setwindowtext函数设置窗口的文本,把文件内容设置到文本框里面就好了。代码供你参考点击开始和暂停就可以修改,有帮助请采纳谢谢!

img


#include "stdafx.h"
#include "Win32Project1.h"
#include <mbstring.h>
#define _CRT_SECURE_NO_WARNINGS 1
#include <windows.h>
#include <tchar.h>

#define IDB_ONE        3301//按键1
#define IDB_TWO        3302//2
#define IDB_THREE    3303//3
#define IDB_FOUR    3304//4
#define IDB_Five    3305//5  窗口
#define IDB_SIX    3306//5  对话框
LRESULT _stdcall WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

HINSTANCE hg_app;//全局实例句柄
int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hwnd;
    WNDCLASS wndcls;//设置这个结构的不同字段
    MSG msg;
    /*↓↓↓↓↓↓↓↓↓↓↓↓注册窗口↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
    wndcls.cbClsExtra = 0;
    wndcls.cbWndExtra = 0;
    wndcls.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);//图标
    wndcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndcls.hInstance = hInstance;
    wndcls.lpfnWndProc = WndProc;//过程函数
    wndcls.lpszClassName = _T("ClassName");//ASCIIZ形式的窗口类名称的地址,每一个应用程序必须有一个窗口类,类名
    wndcls.lpszMenuName = _T("MenuName");//ASCIIZ形式的窗口名称的地址。该名称会显示在标题条上
    wndcls.style = CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&wndcls);//注册这个窗口类型,wndcls
                           /**/
                           /*创建、显示窗口*/
    hwnd = CreateWindow(_T("ClassName"),//窗口类名,
        _T("采集窗口"),//窗口标题
        WS_OVERLAPPEDWINDOW,//窗口样式
        0,//距离屏幕左上角横坐标
        0,//距离屏幕左上角横坐标
        1350,//窗口宽度
        740,//窗口高度
        NULL,//副窗口句柄
        NULL,//菜单句柄
        hInstance,//当前实例句柄
        NULL);//指向一个值的指针,传递给窗口消息,一般为NULL

    ShowWindow(hwnd, SW_SHOWNORMAL);//显示窗口
    UpdateWindow(hwnd);//更新窗口
                       /*CreateWindow创建一个模板*/

                       /*消息循环,退出循环表示程序结束*/
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);//翻译消息
        DispatchMessage(&msg);//分发消息给过程函数
    }
    /*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
    return (int)msg.wParam;
}
/*窗口过程函数*/
LRESULT _stdcall WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)//循环
    {
        /*case WM_COMMAND:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);*/
        break;
    case WM_CREATE:
    {

        //创建三个按钮
        CreateWindow(L"Button", L"开始", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
            35, 10, 160, 60, hwnd, (HMENU)IDB_ONE, hg_app, NULL);
        CreateWindow(L"Button", L"暂停", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
            35, 80, 160, 60, hwnd, (HMENU)IDB_TWO, hg_app, NULL);
        CreateWindow(L"Button", L"取消", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
            35, 150, 160, 60, hwnd, (HMENU)IDB_THREE, hg_app, NULL);
        CreateWindow(L"Button", L"返回", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
            35, 230, 160, 60, hwnd, (HMENU)IDB_FOUR, hg_app, NULL);
        //创建一个窗口,文本框
        CreateWindow(L"EDIT", L"无数据", WS_CHILD/*子窗口*/ | WS_VISIBLE/*初始可见*/ | ES_MULTILINE/*多行*/ | WS_BORDER/*细边框*/ | WS_VSCROLL,
            250, 10, 400, 300, hwnd, (HMENU)IDB_Five, hg_app, NULL);
        //创建一个窗口,对话框
        CreateWindow(L"EDIT", L"数据", WS_VISIBLE/*初始可见*/ | WS_SIZEBOX | WS_CHILD/*子窗口*/ | WS_DLGFRAME/*对话框*/ | WS_BORDER,
            700, 10, 400, 400, hwnd, (HMENU)IDB_SIX, hg_app, NULL);
    }
    break;
    case WM_COMMAND:
    {
        switch (LOWORD(wParam))
        {
        case IDB_ONE:
            //MessageBox(hwnd, L"您点击了第一个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
        {

            SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"正在进行");
            HWND hwndEdit = GetDlgItem(hwnd, IDB_Five);
            TCHAR szText[2048];
            GetWindowText(hwndEdit, szText, 2048);
            wcscat_s(szText, _T("\n急速光粒添加"));
            SetWindowText(hwndEdit, szText);
        }
            break;
        case IDB_TWO:
        {
            //MessageBox(hwnd, L"您点击了第二个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
            SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"已暂停");
            HWND hwndEdit = GetDlgItem(hwnd, IDB_SIX);
            TCHAR szText[2048];
            GetWindowText(hwndEdit, szText, 2048);
            wcscat_s(szText, _T("\n急速光粒添加"));
            SetWindowText(hwndEdit, szText);

        }

            break;
        case IDB_THREE:
            //MessageBox(hwnd, L"您点击了第三个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
            SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"已取消");   //窗口句柄, 应用程序发送此消息来设置一个窗口的文本

            break;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
        break;
        /* case WM_PAINT:
        {
        }
        break;*/
    case WM_DESTROY:
        PostQuitMessage(0);//关闭窗口,如果被拦截就关不了
        break;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);//调用默认过程函数,刷新窗口
    }
    return 0;
    }
}


所有界面窗口或控件都是一个HWND,改变它的文字就用 SetWindowText函数,第一个参数就是HWND,第二个参数是要显示的字符串

上面创建EDIT控件返回的HWND用全局变量保存起来,这样HWND参数就有了

全局变量定一个char数组,读到数据放这个char数组里,作为要显示的字符串,这样SetWindowText的第二个参数的值也有了

需要更新的时候,调一下SetWindowText就好了。

如果数据不变的,只要调一次就好了。

如果数据要变的,在数据变了时调一次就好了。