mxx_123 2021-11-04 17:22 采纳率: 50%
浏览 47
已结题

怎么读取文本文件的内容到窗口的文本框或对话框里面?(非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;
 }
}

  • 写回答

3条回答 默认 最新

  • 急速光粒 2021-11-05 12:46
    关注

    用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;
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月16日
  • 已采纳回答 11月8日
  • 创建了问题 11月4日

悬赏问题

  • ¥15 flask项目,怎么使用AJAX传数据库数据到echarts图表的data里,实现异步加载数据。
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?