实现:win32实现EDIT控件读取和保存

#pragma warning(disable:4996)
#include<windows.h>
#include<string>
#include<fstream>

#define HDC_EDIT_1 0x100
#define HDC_BUTTON_1 0x101
#define HDC_BUTTON_2 0x102

//全局变量声明
HINSTANCE hinst;

//函数声明
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
char * wchar2char(const wchar_t* wchar);

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //HINSTANCE为应用程序的句柄
    WNDCLASSEX wcx; //窗口类
    HWND hwnd; //窗口句柄
    MSG msg;  //消息
    BOOL fGotMessage; //是否成功获取消息
    hinst = hinstance; //用来保存当前的应用程序的句柄
    static TCHAR szAppName[] = "MyWindows";

    //对创建的窗口类进行填充相应的数据结构
    wcx.cbSize = sizeof(wcx); //cxSize转到定义为 该类型为UINT
    wcx.style = CS_HREDRAW | CS_VREDRAW; //样式 大小改变时 重新进行绘制
    wcx.lpfnWndProc = MainWndProc; // 窗口消息处理函数
    wcx.cbWndExtra = 0; // 不使用类内存
    wcx.cbClsExtra = 0; // 不使用窗口内存
    wcx.hInstance = hinstance;  //所属的应用程序的实例句柄
    wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION); //图标: 默认 指定一个和类相关的图标资源句柄,如果没有指定就用默认的。
    wcx.hCursor = LoadCursor(NULL, IDC_ARROW);   // 光标:默认
    wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 画刷背景:WHITE_BRUSH
    wcx.lpszMenuName = NULL; // 菜单:无
    wcx.lpszClassName = szAppName; // 窗口类的名称
    wcx.hIconSm = (HICON)LoadImage(hinstance, //hIconSm指定一个和类相关的小的图标资源句柄,如果是空,系统会根据hIcon的图标来生成一个合适大小的图标来作为和类相关的小的图标资源句柄
        MAKEINTRESOURCE(5),
        IMAGE_ICON,
        GetSystemMetrics(SM_CXSMICON),
        GetSystemMetrics(SM_CXSMICON),
        LR_DEFAULTCOLOR);

    if (!RegisterClassEx(&wcx)) { //创建窗口类
        return -1;
    }

    //调用CreateWindow API
    hwnd = CreateWindow(szAppName, //窗口类名称
        "First Window",  //窗口标题
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, //水平位置:默认
        CW_USEDEFAULT, //垂直位置:默认
        CW_USEDEFAULT, //宽度位置:默认
        500, //高度位置:默认
        (HWND)NULL, // 父窗口:无
        (HMENU)NULL, //菜单:使用窗口类的菜单
        hinstance,  //应用程序实例句柄
        (LPVOID)NULL); //窗口创建时数据:无

    CreateWindow(
        "EDIT",
        "",
        WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE,
        0,
        0,
        800,
        500,
        hwnd,
        (HMENU)HDC_EDIT_1, //需要进行强转类型
        hinstance,
        (LPVOID)NULL
    );

    CreateWindow(
        "BUTTON",
        "选择文件",
        WS_CHILD | WS_VISIBLE,
        900,
        200,
        100,
        50,
        hwnd,
        (HMENU)HDC_BUTTON_1, //需要进行强转类型
        hinstance,
        (LPVOID)NULL
    );

    CreateWindow(
        "BUTTON",
        "保存文本",
        WS_CHILD | WS_VISIBLE,
        900,
        260,
        100,
        50,
        hwnd,
        (HMENU)HDC_BUTTON_2, //需要进行强转类型
        hinstance,
        (LPVOID)NULL
    );

    if (!hwnd) {  //创建窗口失败的处理
        return -1;
    }

    //显示窗口
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    //消息循环,作用就是将我们在窗口上产生的msg进行TranslateMessage解析然后再进行DispatchMessage传输给窗口消息处理函数进行处理
    while ((fGotMessage = GetMessage(&msg, (HWND)NULL, 0, 0)) != 0 && fGotMessage != -1) {
        TranslateMessage(&msg); //翻译作用,比如 在处理按键的时候,将接收到的十六进制转换为字符码char的时候就可以派上用场了
        DispatchMessage(&msg); //传输,根据对应的窗口HWND,找到对应的窗口过程函数,比如这里定义的MainWndProc函数进行处理

        //当DispatchMessage之后,内核中将该句柄对应的窗口过程函数进行调用
    }

    return msg.wParam;
}

/*
MainWndProc
功能:窗口消息处理函数 对所有的消息都使用默认处理函数
*/

LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { //这里接收的hwnd,uMsg,wParam,lParam
    //也就是MSG结构体中的消息,umsg是动作 wParam lParam保存了该动作中的详细信息的,hwnd为该句柄

    TCHAR szchar[100] = {0};
    OPENFILENAME  ofn;
    TCHAR szfile[MAX_PATH]; //用来存储文件名
    std::fstream fs;
    std::string mystring;

    char szBuf[2048] = {0};

    switch (uMsg) { //switch对产生的消息进行处理
    case WM_DESTROY: //当进行关闭处理时候 进行ExitThread 结束进程操作
        PostQuitMessage(0);
        return 0;
    case WM_COMMAND: // 十六进制为0x111
        switch (wParam) {
        case 0x101: //第一个按钮

            ZeroMemory(&ofn, sizeof(ofn));

            ofn.lStructSize = sizeof(OPENFILENAME);
            ofn.hwndOwner = NULL;
            ofn.lpstrFile = szfile;
            ofn.lpstrFile[0] = '\0';
            ofn.nMaxFile = sizeof(szfile);
            ofn.lpstrFilter = "All(*.*)\0*.*\0Text(*.txt)\0*.TXT\0\0";
            ofn.nFilterIndex = 1;
            ofn.lpstrFileTitle = NULL;
            ofn.nMaxFileTitle = 0;
            ofn.lpstrInitialDir = NULL;
            ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

            if (GetOpenFileName(&ofn)) {
                fs.open(ofn.lpstrFile, std::fstream::in);
                while (fs.getline(szBuf, 1024)) {
                    mystring.append(szBuf);
                    mystring.append("\r\n");
                }

                fs.close();
                SetDlgItemText(hwnd, HDC_EDIT_1, mystring.c_str());

            }
            else {
                DWORD myDword = CommDlgExtendedError();
                sprintf(szchar, "error : %d", myDword);
                OutputDebugString(szchar);
            }

            break;

        case 0x102:  //第二个按钮
                ZeroMemory(&ofn, sizeof(ofn));

                ofn.lStructSize = sizeof(OPENFILENAME);
                ofn.hwndOwner = NULL;
                ofn.lpstrFile = szfile;
                ofn.lpstrFile[0] = '\0';
                ofn.nMaxFile = sizeof(szfile);
                ofn.lpstrFilter = "All(*.*)\0*.*\0Text(*.txt)\0*.TXT\0\0";
                ofn.nFilterIndex = 1;
                ofn.lpstrFileTitle = NULL;
                ofn.nMaxFileTitle = 0;
                ofn.lpstrInitialDir = NULL;
                ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

                if (GetOpenFileName(&ofn)) {
                    fs.open(ofn.lpstrFile, std::fstream::out)
                    GetDlgItemText(hwnd, HDC_EDIT_1, szBuf, 2048)
                    fs.write(szBuf, sizeof(szBuf))
                    fs.close();
                    break;
                }

            default:
                break;
        }
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam); //不关心的操作都给windows自己的窗口消息处理函数进行处理
    }

}

原文地址:https://www.cnblogs.com/zpchcbd/p/12253648.html

时间: 2024-08-12 16:03:50

实现:win32实现EDIT控件读取和保存的相关文章

WIN32窗口子类化----自定义Edit控件的右键菜单

前言 Win32应用程序中,子控件的消息都是分发到其父窗口的消息处理函数中去了,这对于我们需要自定义子控件的某些特性时时十分不方便的,还好,Windows为我们提供了控件子类化的相关接口API.核心的思想是:通过获取子控件的消息处理函数地址,设置子控件的消息处理函数到自己定义的函数里,也就是Get/SetWindowLong API的使用. 测试代码 这里是一个简单的测试程序,在控制台程序中创建一个对话框,然后对话框上有一个EDIT控件(资源编辑器里拖入的,不多说),子类化EDIT控件,右键弹出

WIN32汇编 Richedit控件的使用

这次来介绍一下一个独特的控件------Richedit    说实话这次也是第一次接触到这个控件,以前虽然听说过但是不知道具体它是干什么的,从字面上看好像是edit控件的扩展一样,其实这样只说对了一半,Richedit控件确实比edit控件功能强大丰富,但是它们的使用位置不同,edit控件以前在学习控件的时候,就出现了许多edit控件,那时候用edit控件主要是实现向一个小的文本框中输入文本而且基本都是用在对话框中,而且大小也有限制,在单行模式下能容纳的文本不能超过32KB,在多行模式下也不能

vc 在edit控件中动态插入数据滚动显示

内存从网上论坛摘抄整理 思路:给控件设置多行属性,设置垂直滚动条,Auto Vscroll设置为true,放入文本后把插入点设置到末尾 pEdit->LineScroll(pEdit->GetLineCount()); 滚动条滚动到最下端 int len  = pEdit->GetWindowTextLength(); pEdit->SetSel(len,-1,true); //定位光标到内容末尾pEdit->ReplaceSel("12121212");

win32 sdk树形控件的项拖拽实现

本课中,我们将学习如何使用树型视图控件.另外还要学习如何在树型视图中完成拖-拉动作,以及如何使用图象列表. 理论: 树型视图是一种特别的窗口,我们可以使用它一目了然地表示某种层次关系.譬如象在资源管理器中左边窗口中的就是树型视图.您可以调用CreateWindowEx来创建树型视图,传递一个类名""SysTreeView32"",或者您也可以把它放到一个对话框中去.不要忘了在您的代码中加入InitCommonControls函数. 树型视图有几种特有的风格.下面是几

delphi Components[i]清除所有edit控件中的内容

(* 一般的清空combobox方法 combobox1.clear; ... combobox9.clear; *) procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin for i:=0 to self.ComponentCount-1 do begin if self.Components[i] is TCombobox then TCombobox(self.Components[i]).clear;

spin constrol与edit 控件共用

第一步:创建一个spin control,属性 Set Buddy Integer 设为 True,绑定控件为m_spinPollingTime 创建一个edit control,ID为IDC_EDIT_POLLING_TIME, 属性改为只是数字与不可修改, 绑定值为 m_nPollingTime 第二步:在对话框的初始化函数OnInitDialog()里添加 m_spinPollingTime.SetBuddy(GetDlgItem(IDC_EDIT_POLLING_TIME)); // 关

关于Edit控件focused状态,调用自己编写的键盘

一.涉及编写自己的自己的键盘 由于只使用英文字母跟数字等简单的字符而已,没有包括全角或者中文字符.所以直接使用跟手机的输入密码键盘一样的键盘即可. 遇到的问题:1.使用法keybd_event()的方式进行发送消息,不管发送大小写字母都是显示小写字母 2.键盘不能有焦点状态,否则使用的keybd_event则无法将字符发送给edit框.如果使用有焦点的状态则会导致edit控件跟我自己编写的键盘耦合性太大. 3.由于使用duilib的tilelayout而出现键盘的所有按键无法正常对齐. 解决方案

mfc 通过 MapWinGIS 控件读取 shp 文件

记录一下这两天努力的收获,刚来这个公司一周不到,这几天一直在看GIS相关的东西. 首先调通了第一个android 通过 jni 调用 C/C++代码 然后花了两天做了一个mfc 用 MapWinGIS.ocx 控件读取shp格式文件 哎...回头看看,这么简单的东西竟然用了两天时间,简直太浪费时间了 没办法,新手上路不容易呀! 参考原文:http://blog.csdn.net/clever101/article/details/5286575 下面记录一下读取 shp文件的操作过程: MapW

Iocomp控件教程之Analog Display—模拟显示控件(优于EDIT控件)

Analog Display是简洁的显示控件.用于显示指定准确度和单位的模拟值(实数),能够将准确度设置为0.使显示结果为整数. 第一步:建立MFC对话框 第二步:插入AnalogDisplay控件 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > watermark/2/text/aHR0cDovL