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);
}


![[http]](/ns/imgs/http.png)