MicroSoft 사의 가장 큰 재산. win32api라는 이름은 16bit 기반이었던 winapi를 32bit로 확장하면서 붙게 되었다. 하위호환성을 종교적으로 신봉한다.
--서상현
아주 멋진 페이지로군요. 계속 발전시켜 나가셔서 좋은 지식소스가 되길 바랍니다. -- 안형진
1.2. DC를 얻는 방법 ¶
- 아무 곳에서나
HDC GetDC(HWND hWnd); int ReleaseDC(HWND hWnd, HDC hDC);
- WM_PAINT에서
HDC BeginPaint(HWND hWnd); BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint);
1.3. Edit Control 의 총 문자수 구하기 ¶
UINT iTotal; char sBuffer[256]={0,}; iTotal = SendMessage(hEdit,EM_LINELENGTH,0,0) + 1; //+1을 하지 않으면 GetWindowText에서 마지막 한 글자가 빠진다. GetWindowText(hEdit,sBuffer,iTotal);
1.4. 대화상자 안의 자식 원도우 컨트롤 하기 ¶
HWND hEdit; hEdit = GetDlgItem(hWnd, IDC_EDIT1); SetWindowText(hEdit,"test");
1.5. 모달대화상자 만들기 ¶
- 리소스 만들기
- 프로시저 만들기
BOOL CALLBACK DialogProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch(iMsg) { case WM_INITDIALOG: return true; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: case IDCANCEL: EndDialog(hWnd, true); return true; } break; } return false; }
- 대화상자 호출
DialogBox(g_hInst, (LPSTR)IDD_GOTO_DIALOG, hWnd, DialogProc);
1.7. 타이틀바 없을때 클라이언트 영역을 눌렀을 때 마우스로 윈도우 움직이기 ¶
static bool bClk=false; POINT old_point,new_point; static POINT t_point; case WM_LBUTTONDOWN: bClk = true; //시작지점 t_point.x = LOWORD(lParam); t_point.y = HIWORD(lParam); return 0; case WM_LBUTTONUP: bClk = false; return 0; case WM_MOUSEMOVE: if(bClk) { new_point.x = LOWORD(lParam); new_point.y = HIWORD(lParam); ClientToScreen(hWnd,&new_point); new_point.x = new_point.x - t_point.x; new_point.y = new_point.y - t_point.y; MoveWindow(hWnd, new_point.x,new_point.y,bx,by,true); } return 0;
1.8. 팝업메뉴 ¶
메뉴 리소스 만들고
HMENU hMenu,hPopup; case WM_CONTEXTMENU: hMenu = LoadMenu(g_hInst,MAKEINTRESOURCE(IDR_MENU1)); hPopup = GetSubMenu(hMenu,0); TrackPopupMenu(hPopup,TPM_LEFTALIGN,LOWORD(lParam),HIWORD(lParam),0,hWnd,NULL); DestroyMenu(hMenu); return 0;
1.9. 트레이 ¶
#define TRAY_NOTIFY (WM_APP + 100)
아이콘 만들고
NOTIFYICONDATA nid; case WM_CREATE: nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = hWnd; nid.uID = 0; nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE; nid.uCallbackMessage = TRAY_NOTIFY; nid.hIcon = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON1)); //IDI_ICON1는 아이콘 리소스 이름. strcpy(nid.szTip,"YamCard"); Shell_NotifyIcon(NIM_ADD, &nid); case WM_DESTROY: nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = hWnd; nid.uID = 0; Shell_NotifyIcon(NIM_DELETE, &nid);
1.10. 열기 대화상자 추가법 ¶
Swing Containers (->) FileChooser, UI 밑에 생성, Inspector에서 Event 탭에서 actionPerformed() 이벤트 더블클릭, 다음을 입력
if(JFileChooser.APPROVE_OPTION == jFileChooser1.showOpenDialog(this)){ statusBar.setText("Opened " + jFileChooser1.getSelectedFile().getPath()); }
1.11. 공통대화상자 ¶
OPENFILENAME ofn; memset(&ofn,0,sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFilter = "모든파일(*.*)\0*.*\0"; ofn.lpstrFile = lpstrFile; ofn.lpstrFileTitle = lpstrFileTitle; ofn.nMaxFile = MAX_PATH; ofn.nMaxFileTitle = MAX_PATH; if(GetOpenFileName(&ofn) != 0){ ctr_hwnd = GetDlgItem(hWnd,IDC_LIST_PSDFILELIST); //SendMessage(ctr_hwnd,LB_ADDSTRING,0,(LPARAM)lpstrFile); SendMessage(ctr_hwnd,LB_ADDSTRING,0,(LPARAM)lpstrFileTitle); }