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

代码海岸 课程设计 1

做了一个纯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;
 }
}

回复

共2条回复 我来回复
  • 代码驿站
    这个人很懒,什么都没有留下~
    评论

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

    #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;
        }
    }
    
    0条评论
  • 毕设导航
    这个人很懒,什么都没有留下~
    评论

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

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

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

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

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

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

    0条评论

发表回复

登录后才能评论