硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3910|回复: 4
收起左侧

[客户分享] 编辑框 控件 获取的值不对 EDIT_GetText(hItem[5], nDataStr, 3); //测电阻时的温度

[复制链接]

1

主题

17

回帖

20

积分

新手上路

积分
20
QQ
发表于 2019-5-19 13:25:05 | 显示全部楼层 |阅读模式
static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] =
{
        { WINDOW_CreateIndirect, "Window_DzPage1", ID_WINDOW_1, 1, 9, 577, 380, 0, 0x0, 0 },
        { TEXT_CreateIndirect, "Text_Id11", ID_TEXT_100, 12, 17, 233, 32, 0, 0x0, 0 },
        { EDIT_CreateIndirect, "Edit_Id11", ID_EDIT_100, 255, 15, 139, 33, 0, 0x05, 0 },        //0x05编辑的字符长度
        { TEXT_CreateIndirect, "Text_Id12", ID_TEXT_101, 12, 56, 233, 31, 0, 0x0, 0 },
        { EDIT_CreateIndirect, "Edit_Id12", ID_EDIT_101, 255, 54, 139, 33, 0, 0x05, 0 },
        { TEXT_CreateIndirect, "Text_Id13", ID_TEXT_102, 12, 95, 233, 31, 0, 0x0, 0 },
        { EDIT_CreateIndirect, "Edit_Id13", ID_EDIT_102, 255, 93, 139, 33, 0, 0x05, 0 },
        { TEXT_CreateIndirect, "Text_Id14", ID_TEXT_103, 12, 137, 233, 30, 0, 0x0, 0 },
        { EDIT_CreateIndirect, "Edit_Id14", ID_EDIT_103, 255, 133, 139, 33, 0, 0x05, 0 },
        { TEXT_CreateIndirect, "Text_Id15", ID_TEXT_104, 42, 176, 203, 31, 0, 0x0, 0 },
        { EDIT_CreateIndirect, "Edit_Id15", ID_EDIT_104, 255, 173, 139, 33, 0, 0x05, 0 },
        { TEXT_CreateIndirect, "Text_Id16", ID_TEXT_105, 34, 217, 210, 30, 0, 0x0, 0 },
        { EDIT_CreateIndirect, "Edit_Id16", ID_EDIT_105, 255, 213, 139, 33, 0, 0x03, 0 },
        { TEXT_CreateIndirect, "Text_Id17", ID_TEXT_106, 34, 257, 210, 31, 0, 0x0, 0 },
        { EDIT_CreateIndirect, "Edit_Id17", ID_EDIT_106, 255, 253, 139, 33, 0, 0x03, 0 },
        { TEXT_CreateIndirect, "Text_Id18", ID_TEXT_107, 37, 297, 207, 32, 0, 0x0, 0 },
        { EDIT_CreateIndirect, "Edit_Id18", ID_EDIT_107, 255, 293, 139, 33, 0, 0x03, 0 },
};
/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialog1(WM_MESSAGE * pMsg)
{
        WM_HWIN hItem;
        int     NCode;
        int     Id;
        char nDataStr[10];

        // USER START (Optionally insert additional variables)
        // USER END

        switch (pMsg->MsgId)
        {
                case WM_PAINT: //重绘事件
/*
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_100);
                        sprintf(nDataStr, "%f\0", fltRatioVoltageHigh);
                        EDIT_SetText(hItem, nDataStr1);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_101);
                        sprintf(nDataStr, "%f\0", fltRatioCurrentHigh);
                        EDIT_SetText(hItem, nDataStr);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);

                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_102);
                        sprintf(nDataStr, "%f\0", fltRatioVoltagelow);
                        EDIT_SetText(hItem, nDataStr);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);
               
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_103);
                        sprintf(nDataStr, "%f\0", fltRatioCurrentlow);
                        EDIT_SetText(hItem, nDataStr);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);               
*/
//@wxh 如果在一个窗口里面,直接在回调函数里面两个一起改。如果在其它窗口里面,需要发自定义消息       
                        break;
                case WM_INIT_DIALOG:
                        // Initialization of 'Text_Id11'
                        //
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_100);
                        TEXT_SetFont(hItem, &GUI_FontHeiTiX26);
                        TEXT_SetText(hItem, mId11_text);
                        TEXT_SetTextAlign(hItem, GUI_TA_RIGHT | GUI_TA_VCENTER);
                        //
                        // Initialization of 'Edit_Id11'
                        //
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_100);
//                        sprintf(nDataStr, "%f\0", mDz_Area1[0].nData_f);
                        sprintf(nDataStr, "%f\0", fltEmptyExternalVoltageCouplerCoef);        //空载使用外部电压互感器后的变比
                        EDIT_SetText(hItem, nDataStr);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);
                        //
                        // Initialization of 'Text_Id12'
                        //
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_101);
                        TEXT_SetFont(hItem, &GUI_FontHeiTiX26);
                        TEXT_SetText(hItem, mId12_text);
                        TEXT_SetTextAlign(hItem, GUI_TA_RIGHT | GUI_TA_VCENTER);
                //
                // Initialization of 'Edit_Id12'
                //
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_101);
//                        sprintf(nDataStr, "%f\0", mDz_Area1[1].nData_f);
                        sprintf(nDataStr, "%f\0", fltEmptyExternalCurrentCouplerCoef);        //空载fltEmptyExternalCurrentCouplerCoef
                        EDIT_SetText(hItem, nDataStr);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);
                //
                // Initialization of 'Text_Id13'
                //
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_102);
                        TEXT_SetFont(hItem, &GUI_FontHeiTiX26);
                        TEXT_SetTextAlign(hItem, GUI_TA_RIGHT | GUI_TA_VCENTER);
                        TEXT_SetText(hItem, mId13_text);
                //
                // Initialization of 'Edit_Id13'
                //
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_102);
//                        sprintf(nDataStr, "%f\0", mDz_Area1[2].nData_f);
                        sprintf(nDataStr, "%f\0", fltLoadExternalVoltageCouplerCoef);        //负载使用外部电压互感器后的变比
                        EDIT_SetText(hItem, nDataStr);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);
                        //
                        // Initialization of 'Text_Id14'
                        //
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_103);
                        TEXT_SetFont(hItem, &GUI_FontHeiTiX26);
                        TEXT_SetTextAlign(hItem, GUI_TA_RIGHT | GUI_TA_VCENTER);
                        TEXT_SetText(hItem, mId14_text);
                        //
                        // Initialization of 'Edit_Id14'
                        //
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_103);
//                        sprintf(nDataStr, "%f\0", mDz_Area1[3].nData_f);
                        sprintf(nDataStr, "%f\0", fltLoadExternalCurrentCouplerCoef);        //负载使用外部电流互感器后的变比
                        EDIT_SetText(hItem, nDataStr);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);

// Initialization of 'Text_Id15'
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_104);                //"线路电阻(mΩ)";
                        TEXT_SetFont(hItem, &GUI_FontHeiTiX26);
                        TEXT_SetTextAlign(hItem, GUI_TA_RIGHT | GUI_TA_VCENTER);
                        TEXT_SetText(hItem, mId15_text);
// Initialization of 'Edit_Id15'
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_104);
                        sprintf(nDataStr, "%f\0", fltLineResistance);
                        EDIT_SetText(hItem, nDataStr);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);
// Initialization of 'Text_Id16'
//例如printf("%d",printf("%d\t",32));则输出32 3.原因是里面的printf打印32 (\t的输出),返回值是打印字符的个数,打印出来的是32 ,共3个字符(带转义的字符),
//因此输出外面的printf输出3.
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_105);        //测电阻时的温度
                        TEXT_SetFont(hItem, &GUI_FontHeiTiX26);
                        TEXT_SetTextAlign(hItem, GUI_TA_RIGHT | GUI_TA_VCENTER);
                        TEXT_SetText(hItem, mId16_text);
// Initialization of 'Edit_Id16'
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_105);        //nTempWhenMeasureResitance
                        sprintf(nDataStr, "%03d", nTempWhenMeasureResitance);
                        EDIT_SetText(hItem, nDataStr);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);

// Initialization of 'Text_Id17'
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_106);        //当前变压器的温度值
                        TEXT_SetFont(hItem, &GUI_FontHeiTiX26);
                        TEXT_SetTextAlign(hItem, GUI_TA_RIGHT | GUI_TA_VCENTER);
                        TEXT_SetText(hItem, mId17_text);
// Initialization of 'Edit_Id17'
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_106);        //nCurTransferTemp当前变压器的温度值
                        sprintf(nDataStr, "%03d", nCurTransferTemp);
                        EDIT_SetText(hItem, nDataStr);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);
// Initialization of 'Text_Id18'
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_107);        //用户设定的校正目标温度
                        TEXT_SetFont(hItem, &GUI_FontHeiTiX26);
                        TEXT_SetTextAlign(hItem, GUI_TA_RIGHT | GUI_TA_VCENTER);
                        TEXT_SetText(hItem, mId18_text);
// Initialization of 'Edit_Id18'
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_107);
//                        sprintf(nDataStr, "%03d\0", nAdjustTemp);
                        sprintf(nDataStr, "%03d", nAdjustTemp);
                        EDIT_SetText(hItem, nDataStr);
                        EDIT_SetFont(hItem, GUI_FONT_8X16X2X2);

                        break;
                case WM_NOTIFY_PARENT:
                        Id    = WM_GetId(pMsg->hWinSrc);
                        NCode = pMsg->Data.v;
                        switch(Id)
                        {
                                case ID_EDIT_100: // Notifications sent by 'Edit_Id11'
                                        case ID_EDIT_101: // Notifications sent by 'Edit_Id12'
                                        case ID_EDIT_102: // Notifications sent by 'Edit_Id13'
                                        case ID_EDIT_103: // Notifications sent by 'Edit_Id14'
                                        case ID_EDIT_104: // Notifications sent by 'Edit_Id15'
                                        case ID_EDIT_105: // Notifications sent by 'Edit_Id16'
                                        case ID_EDIT_106: // Notifications sent by 'Edit_Id17'
                                        case ID_EDIT_107: // Notifications sent by 'Edit_Id18'
//                                        case ID_EDIT_108: // Notifications sent by 'Edit_Id19'
//                                        case ID_EDIT_109: // Notifications sent by 'Edit_Id19'
                                        switch(NCode)
                                        {
                                                case WM_NOTIFICATION_CLICKED:
                                        // USER START (Optionally insert code for reacting on notification message)
                                        // USER END
                                                break;
                  case WM_NOTIFICATION_RELEASED:

void SaveTransSettingTo24c256(unsigned char iArea, WM_HWIN hWin)                //保存用户的设置SaveTransSettingToRtc
{
        U8 i, nSel;
        UINT16 temp;
        char nDataStr[10];
        unsigned char nData[2];
        WM_HWIN hItem[10];
       
        if (1 == iArea)                //定值区1
        {
                hItem[0] = WM_GetDialogItem(hWin, ID_EDIT_100);
                hItem[1] = WM_GetDialogItem(hWin, ID_EDIT_101);
                hItem[2] = WM_GetDialogItem(hWin, ID_EDIT_102);
                hItem[3] = WM_GetDialogItem(hWin, ID_EDIT_103);
                hItem[4] = WM_GetDialogItem(hWin, ID_EDIT_104);
                hItem[5] = WM_GetDialogItem(hWin, ID_EDIT_105);
                hItem[6] = WM_GetDialogItem(hWin, ID_EDIT_106);
                hItem[7] = WM_GetDialogItem(hWin, ID_EDIT_107);
//                hItem[8] = WM_GetDialogItem(hWin, ID_EDIT_108);
//                hItem[9] = WM_GetDialogItem(hWin, ID_EDIT_109);
               
                for(i=0;i<5;i++)        //5*4 = 20 字节
                {
                        EDIT_GetText(hItem, nDataStr, 7);
                        mDz_Area1.nData_f = myatof(nDataStr);
                        AT24CXX_Write(4*i+DzArea1_ADDR, mDz_Area1.nByte_D, 4);        // 保存到外部IIC AT24CXX
                }
                EDIT_GetText(hItem[5], nDataStr, 3);        //测电阻时的温度
                temp = myatoi(nDataStr);
                nData[0]=(unsigned char)(temp>>8 & 0xFF);
                nData[1]=(unsigned char)(temp & 0xFF);
                AT24CXX_Write(DzArea1_ADDR+20, nData, 2);        // 保存到外部IIC AT24CXX
                memset(nDataStr,0x00,7);                //功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,

                EDIT_GetText(hItem[6], nDataStr, 3);        //当前变压器的温度值
                temp = myatoi(nDataStr);
                nData[0]=(unsigned char)(temp>>8 & 0xFF);
                nData[1]=(unsigned char)(temp & 0xFF);
                AT24CXX_Write(DzArea1_ADDR+22, nData, 2);        // 保存到外部IIC AT24CXX               
                memset(nDataStr,0x00,7);                //功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,

                EDIT_GetText(hItem[7], nDataStr, 3);        //用户设定的校正目标温度
                temp = myatoi(nDataStr);
                nData[0]=(unsigned char)(temp>>8 & 0xFF);
                nData[1]=(unsigned char)(temp & 0xFF);
                AT24CXX_Write(DzArea1_ADDR+24, nData, 2);        // 保存到外部IIC AT24CXX
                memset(nDataStr,0x00,7);                //功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,
        }
        if (2 == iArea)  //变压器容量定值区2
        {
                hItem[0] = WM_GetDialogItem(hWin, ID_EDIT_200);
                hItem[1] = WM_GetDialogItem(hWin, ID_EDIT_201);
                hItem[2] = WM_GetDialogItem(hWin, ID_EDIT_202);
                hItem[3] = WM_GetDialogItem(hWin, ID_EDIT_203);
                hItem[4] = WM_GetDialogItem(hWin, ID_EDIT_204);
                hItem[5] = WM_GetDialogItem(hWin, ID_EDIT_205);
                hItem[6] = WM_GetDialogItem(hWin, ID_EDIT_206);
                for(i=0;i<7;i++)
                {
                        EDIT_GetText(hItem, nDataStr, 7);
                        mDz_Area2.nData_f = myatof(nDataStr);
                        AT24CXX_Write(4*i+DzArea2_ADDR, mDz_Area2.nByte_D, 4);        // 保存到外部IIC AT24CXX
                }
                if (mDz_Area2[0].nData_f != fltCap)         //容量值改变
                {
                        fltCap = mDz_Area2[0].nData_f;
                        unRatioCap = TRANS_CAP(fltCap);
                        AT24CXX_Write(DzArea2_ADDR, mDz_Area2[0].nByte_D, 4);        // 保存到外部IIC AT24CXX
// 3、根据容量,自动生成电压电流
//变压器低压侧的电压/电流输入完成后,根据容量值,自动计算出电流/电压值
                        CBAutoCalculateVI();
                }
        }
        if (3 == iArea) // 定值区3
        {
                hItem[0] = WM_GetDialogItem(hWin, ID_DROPDOWN_300);
                hItem[1] = WM_GetDialogItem(hWin, ID_DROPDOWN_301);
                hItem[2] = WM_GetDialogItem(hWin, ID_DROPDOWN_302);
                hItem[3] = WM_GetDialogItem(hWin, ID_DROPDOWN_303);
                hItem[4] = WM_GetDialogItem(hWin, ID_DROPDOWN_304);
               
                for(i=0;i<5;i++)
                {
                        nSel = DROPDOWN_GetSel(hItem);
                        if (nSel == 0) // 投入
                        {
                                mDz_Area3 |= 1<<i;
                        }
                        else if (nSel == 1) // 退出
                        {
                                mDz_Area3 &= ~(1<<i);
                        }
                }
                nData[0]=(unsigned char)(mDz_Area3>>8 & 0xFF);
                nData[1]=(unsigned char)(mDz_Area3 & 0xFF);
                AT24CXX_Write(DzArea3_ADDR+0, nData, 2);                // 保存到外部IIC AT24CXX
        }
}
编辑前面5个浮点数没有影响,后面三个温度值是整型数,有问题
编辑其中一个整型数在获取值的时候例外两个原来设的值变化了


下面三个互相影响
硬汉(Eric2013)(512464265)  13:11:03
@wxh 方便的话,论坛直接发个帖子,晚上我详细回复你file:///C:\Users\Unytech\AppData\Local\Temp\UG9`@AH2%L{}S0N6}3E~FO2.gif,你内容有点多,看着有点吃力




编辑后面三个数据整型数对例外两个有影响

编辑后面三个数据整型数对例外两个有影响
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
QQ
 楼主| 发表于 2019-5-19 13:28:56 | 显示全部楼层
本来是分别设置25℃  30℃  75℃,改变后面的75度后对前面两个造成影响
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
QQ
 楼主| 发表于 2019-5-19 23:18:36 | 显示全部楼层
已经解决了
                EDIT_GetText(hItem[5], nDataStr, 3);        //测电阻时的温度
                temp = myatoi(nDataStr);
                nData[0]=(unsigned char)(temp>>8 & 0xFF);
                nData[1]=(unsigned char)(temp & 0xFF);
                AT24CXX_Write(DzArea1_ADDR+20, nData, 2);        // 保存到外部IIC AT24CXX
                memset(nDataStr,0x00,7);                //功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值
改成                EDIT_GetText(hItem[5], nDataStr, 5);        //测电阻时的温度

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107137
QQ
发表于 2019-5-20 02:18:26 | 显示全部楼层
wangxihe126 发表于 2019-5-19 23:18
已经解决了
                EDIT_GetText(hItem[5], nDataStr, 3);        //测电阻时的温度
           ...

不好意思,回复晚了。
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
发表于 2020-12-15 11:36:47 | 显示全部楼层
wangxihe126 发表于 2019-5-19 23:18
已经解决了
                EDIT_GetText(hItem[5], nDataStr, 3);        //测电阻时的温度
           ...

大神可以分享一下EDIT部分的代码吗?我想看看EDIT是怎么保存数据的,我QQ1430407314
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-20 03:30 , Processed in 0.167612 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表