Win32 API 窗口版本转换度分秒为小数
生活随笔
收集整理的這篇文章主要介紹了
Win32 API 窗口版本转换度分秒为小数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
經(jīng)緯度的度分秒和小數(shù)之間轉(zhuǎn)換是做GIS時常用的;下面實現(xiàn)一個Win32 API 版本度分秒轉(zhuǎn)換為小數(shù);
與此網(wǎng)站對比;
http://www.gzhatu.com/du2dfm.html
?
使用VC++ 6 構(gòu)建;
/*------------------------------------------------- bobo, 2020 -------------------------------------------------*/#include <windows.h> #include <windowsx.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); float lltodecimal(int, int, int); HINSTANCE appInstance;int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) {static TCHAR szAppName[] = TEXT("lonlat");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;appInstance = hInstance;if (!RegisterClass(&wndclass)){MessageBox(NULL, TEXT("Program requires Windows NT!"),szAppName, MB_ICONERROR);return 0;}hwnd = CreateWindow(szAppName, TEXT("度分秒轉(zhuǎn)換小數(shù)點"),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) {HDC hdc;PAINTSTRUCT ps ;char buf1[30],buf2[30],buf3[30];int v1,v2,v3,v4;HWND hButton;HWND hEdit1,hEdit2,hEdit3,hEdit4;LPTSTR result[128];float llnumber = 0;switch (message){case WM_CREATE:hEdit1 = (HWND)CreateWindow(TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 10,10,100,50,hwnd,(HMENU)521,appInstance,NULL);hEdit2 = (HWND)CreateWindow(TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 120,10,100,50,hwnd,(HMENU)522,appInstance,NULL);hEdit3 = (HWND)CreateWindow(TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 230,10,100,50,hwnd,(HMENU)523,appInstance,NULL);hEdit4 = (HWND)CreateWindow(TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 340,10,150,50,hwnd,(HMENU)524,appInstance,NULL);hButton = (HWND)CreateWindow(TEXT("Button"),TEXT("DO IT !!!"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,300, 100, 160, 65,hwnd,(HMENU)520, //設(shè)置按鈕id,原本是設(shè)置菜單的 所以需要HMENUappInstance,NULL);return 0;case WM_SIZE:return 0;case WM_RBUTTONDOWN:return 0;case WM_LBUTTONDOWN: return 0;case WM_PAINT:hdc = BeginPaint(hwnd, &ps);EndPaint(hwnd, &ps);return 0;case WM_COMMAND: if (LOWORD(wParam) == 520 && HIWORD(wParam) == BN_CLICKED)//按鈕{GetWindowText(GetDlgItem(hwnd,521), buf1, 30);//根據(jù)父窗口句柄以及控件id, 獲取控件句柄,然后用GetWindowText獲取控件內(nèi)的文本v1=atoi(buf1); //轉(zhuǎn)換為整型GetWindowText(GetDlgItem(hwnd,522), buf2, 30);v2=atoi(buf2);GetWindowText(GetDlgItem(hwnd,523), buf3, 30);v3=atoi(buf3);//MessageBox(hwnd,result, TEXT("提示"), MB_OK);//SetWindowText(hEdit2,result); //錯誤,無法設(shè)置hEdit2;llnumber=lltodecimal(v1,v2,v3);sprintf(result,"%.7lf",llnumber); //格式化為float,保留7位小數(shù)SetWindowText(GetDlgItem(hwnd,524),result);}break;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd, message, wParam, lParam); }float lltodecimal(int d1, int f1, int m1) {float dc1=(float)d1 + (float)f1 / 60 + (float)m1 / 3600;return dc1; }實現(xiàn)了基本功能,問題還不少;并且只能輸入整數(shù);
?
總結(jié)
以上是生活随笔為你收集整理的Win32 API 窗口版本转换度分秒为小数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言数组学习 - 使用窗口版程序演示
- 下一篇: Win32程序简单演示-模拟电子表格移动