永发信息网

用VC进行SDK编程碰到的问题

答案:3  悬赏:60  手机版
解决时间 2021-04-25 07:01
现在简化问题,假设现在有两个编辑框,一个用于输入一个输出。客户向第一个编辑框里输入数字(问题一:这里输入的数字只能是TCHAR格式的吗?能不能直接是double或int型的,能够通过某某函数直接取得计算的?)。然后通过GetDlgItemText()函数得到客户输入的数字,再经过atoi()函数转换成int格式,通过计算后得到一个值,再通过itoa()转换成TCHAR格式,最后swprint()输出。(问题二:我这里的操作只能是对int类型进行操作,有没有方法能够实现double型的操作,输入的和输出的都是double型,比如小型计算器的double数据加减)   牛人大虾快快出现,教教我吧,我是新手,拜托!
最佳答案

1.要获取内容需要向目标发送消息 WM_GETTEXT 具体信息你去查MSDN这里不多说了。


返回值:


The return value is the number of TCHARs copied, not including the terminating null character  


看到这个你的第一个你自己应该明白了吧!


2.   通过atof 转换获取 double 数据


    函数名: atof


  功 能: 把字符串转换成浮点数


  用 法: double atof(const char *nptr);


然后加运算 得到结果在利用 sprintf以double形式输出到缓冲区,然后显示。


这里我作了一个例子(其中一种解决方式,有兴趣可以在翻翻说解法很多),分别向两个"edit"中输入double数据,为了方便起见,我在关闭窗口的时候即


受到消息WM_DESTROY 将double数据转换然后MessageBox显示数据


参考代码,主要是受到消息WM_DESTROY时候的处理,至于你自己的具体问题你套用就OK了。


    SendMessage(hwndEdit1,WM_GETTEXT,20,(LPARAM)num);
    dval1=atof(num);
    SendMessage(hwndEdit2,WM_GETTEXT,20,(LPARAM)num);
    dval2=atof(num);
    sprintf(num,"%lf",dval1+dval2);
    MessageBox(NULL,num,"result",MB_OK);


--------------


如下是完整例子


#include <windows.h>
    
#define ID_EDIT    1


LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);


TCHAR szAppName[] = TEXT ("PopPad1") ;


int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
    
    PSTR szCmdLine, int iCmdShow)
    
{
    
    HWND    hwnd ;
    
    MSG    msg ;
    
    WNDCLASS    wndclass ;
    
  
    
    wndclass.style    = CS_HREDRAW | CS_VREDRAW ;
    
    wndclass.lpfnWndProc    = WndProc ;
    
    wndclass.cbClsExtra    = 0 ;
    
    wndclass.cbWndExtra    = 0 ;
    
    wndclass.hInstance    = hInstance ;
    
    wndclass.hIcon    = LoadIcon (NULL, IDI_APPLICATION) ;
    
    wndclass.hCursor    = LoadCursor (NULL, IDC_ARROW) ;
    
    wndclass.hbrBackground    = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    
    wndclass.lpszMenuName    = NULL ;
    
    wndclass.lpszClassName    = szAppName ;
    
  
    
    if (!RegisterClass (&wndclass))
    
    {
    
    MessageBox (  NULL, TEXT ("This program requires Windows NT!"),
    
    szAppName, MB_ICONERROR) ;
    
    return 0 ;
    
    }


    hwnd = CreateWindow (szAppName, szAppName,
    
    WS_OVERLAPPEDWINDOW,
    
    CW_USEDEFAULT, CW_USEDEFAULT,
    
    CW_USEDEFAULT, CW_USEDEFAULT,
    
    NULL, NULL, hInstance, NULL) ;
    
  ShowWindow (hwnd, iCmdShow) ;
    
  UpdateWindow (hwnd) ;
    
  
    
    while (GetMessage (&msg, NULL, 0, 0))
    
    {
    
    TranslateMessage (&msg) ;
    
    DispatchMessage (&msg) ;
    
    }
    
    return msg.wParam ;
    
}   


LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)
    
{
    static HWND hwndEdit1,hwndEdit2;
    TCHAR num[20];
    double dval1, dval2;
    switch (message)
    {
    case WM_CREATE:
    hwndEdit1 = CreateWindow (TEXT ("edit"), NULL,
    WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |
    WS_BORDER | ES_LEFT | ES_MULTILINE |
    ES_AUTOHSCROLL | ES_AUTOVSCROLL,
    0, 0, 0, 0, hwnd, (HMENU) ID_EDIT,
    ((LPCREATESTRUCT) lParam) -> hInstance, NULL) ;
    hwndEdit2= CreateWindow (TEXT ("edit"), NULL,
    WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |
    WS_BORDER | ES_LEFT | ES_MULTILINE |
    ES_AUTOHSCROLL | ES_AUTOVSCROLL,
    0, 0, 0, 0, hwnd, (HMENU) ID_EDIT,
    ((LPCREATESTRUCT) lParam) -> hInstance, NULL) ;
    return 0 ;
    case   WM_SETFOCUS :
    SetFocus (hwndEdit1) ;    
    return 0 ;  
    case   WM_SIZE :
    MoveWindow (hwndEdit1, 0, 0, LOWORd (lParam)/5, HIWORd (lParam)/10, TRUE) ;
    MoveWindow (hwndEdit2,0,HIWORd(lParam)/10,LOWORd(lParam)/5,HIWORd(lParam)/10,TRUE);
    return 0 ;
    case WM_DESTROY:
    SendMessage(hwndEdit1,WM_GETTEXT,20,(LPARAM)num);
    dval1=atof(num);
    SendMessage(hwndEdit2,WM_GETTEXT,20,(LPARAM)num);
    dval2=atof(num);
    sprintf(num,"%lf",dval1+dval2);
    MessageBox(NULL,num,"result",MB_OK);
    PostQuitMessage (0) ;
    return 0 ;
    }
    return DefWindowProc (hwnd, message, wParam, lParam) ; 
}

全部回答
我们还没学MFC和SDK,所以你的问题我看不懂。。。如果只是纯粹的数据问题,你把题目解释一下或许可以做

为啥要用SDK捏?MFC可以很快的实现哦,直接给编辑框绑定一个double型变量就可以了,不过SDK貌似也可以,我不常用SDK,所以不太了解SDK的一些机制

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
恋人之间有哪些浪漫情节
江苏省哪里好玩
DNF客服人工服务电话是多少?打通了怎么转人
两岁的小孩子今天拉稀还有点呕吐.怎么办啊??
业务中的打工赚G币
为什么我的QQ所在位置与实际不符合
DNF我武神58级598力量算多吗??
体温经常小于36摄氏度,是病理状态吗?
我的绿钻过期后、为什么我以前免费的音乐也不
PSP有什么好玩的游戏,容量小点的,可以多下载
被窝是青春的坟墓么?
票据贴现和票据质押贷款业务的特性
关于水果的诗歌儿童,搜集水果或蔬菜的诗歌
威霸马达是哪辆赛车用的
农场的钱是开地好,还是买房子?
推荐资讯
山西大同大学2010年的二本A类通知书是否发放
我喜欢一个人,可她不喜欢我,该怎办?
上哪能看三国演义的动画片
如果我跟我兄弟在完的时候他老婆用手机拍我
动感地带情侣专线计划业务怎么用短信开通?
实况2010里面有库蒂尼奥这个人吗
幸运金币用来干嘛????
魔兽世界工程洗了 工程头不拿下来一直可以用
EHS在小说里是什么意思
被朋友欺骗了该怎么办!谁能告诉我!谢啦!
青岛五十八中作业多不? 新高一
谁能给我一个关于南贤俊的QQ头像(闪动最好)
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?