#include #include #include #include"resource.h" LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE,int); LRESULT CALLBACK MyDlgProc(HWND hDlg,UINT msg,WPARAM wp,LPARAM lp); char szClassName[]="UpDownControl"; double dlg_d; int WINAPI WinMain(HINSTANCE hCurInst,HINSTANCE hPrevInst, LPSTR lpsCmdLine,int nCmdShow) { MSG msg; BOOL bRet; if(!InitApp(hCurInst)) return FALSE; if(!InitInstance(hCurInst,nCmdShow)) return FALSE; while((bRet=GetMessage(&msg,NULL,0,0))!=0){ if(bRet==-1){ MessageBox(NULL,"GetMessageエラー","Error",MB_OK); break; }else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } ATOM InitApp(HINSTANCE hInst) { WNDCLASSEX wc; wc.cbSize=sizeof(WNDCLASSEX); wc.style=CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc=WndProc; wc.cbClsExtra=0; wc.cbWndExtra=0; wc.hInstance=hInst; wc.hIcon=(HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0,0, LR_DEFAULTSIZE|LR_SHARED); wc.hCursor=(HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0,0, LR_DEFAULTSIZE|LR_SHARED); wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName=NULL; wc.lpszClassName=(LPCTSTR)szClassName; wc.hIconSm=(HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0,0, LR_DEFAULTSIZE|LR_SHARED); return RegisterClassEx(&wc); } BOOL InitInstance(HINSTANCE hInst,int nCmdShow) { HWND hWnd; hWnd=CreateWindow(szClassName, "アップダウンコントロール", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if(!hWnd) return FALSE; ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp) { HDC hdc; PAINTSTRUCT ps; char str[32]; HINSTANCE hInst; switch(msg){ case WM_PAINT: hdc=BeginPaint(hWnd,&ps); sprintf(str,"%lf",dlg_d); TextOut(hdc,0,0,str,(int)strlen(str)); EndPaint(hWnd,&ps); break; case WM_KEYDOWN: if(wp==VK_SHIFT){ hInst=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE); if(DialogBox(hInst,"MYDLG",hWnd,(DLGPROC)MyDlgProc)==IDOK) InvalidateRect(hWnd,NULL,FALSE); } break; case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd,msg,wp,lp); } return 0; } LRESULT CALLBACK MyDlgProc(HWND hDlg,UINT msg,WPARAM wp,LPARAM lp) { static HWND hEdit1,hUpdown1; double d; char str[16]; LPNMUPDOWN lpnmud; switch(msg){ case WM_INITDIALOG: d=dlg_d; hEdit1=GetDlgItem(hDlg,IDC_EDIT1); hUpdown1=GetDlgItem(hDlg,IDC_SPIN1); sprintf(str,"%lf",d); SetWindowText(hEdit1,str); return TRUE; case WM_NOTIFY: if(wp==(WPARAM)IDC_SPIN1){ lpnmud=(LPNMUPDOWN)lp; if(lpnmud->hdr.code==UDN_DELTAPOS){ GetWindowText(hEdit1,str,(int)sizeof(str)); d=atof(str); if((lpnmud->iDelta)<0) d+=0.01; else if((lpnmud->iDelta)>0) d-=0.01; sprintf(str,"%lf",d); SetWindowText(hEdit1,str); return TRUE; } } return FALSE; case WM_COMMAND: switch(LOWORD(wp)){ case IDOK: GetWindowText(hEdit1,str,(int)sizeof(str)); dlg_d=atof(str); EndDialog(hDlg,IDOK); return TRUE; case IDCANCEL: EndDialog(hDlg,IDCANCEL); return TRUE; } return FALSE; } return FALSE; }