|
MFC나 VCL 같은 클래스 라이브러리를 사용하지 않은 순수 API로 코딩한것입니다.
이건 어느컴파일러든 다 컴파일될겁니다.
찰스 페촐드의 프로그래밍 윈도우즈 시리즈를 서적을 참고하세요.
곽성주 님이 쓰신 글 :
: // 윈도우즈 API
: LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
: // 실행윈도우 설정 및 실행
: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
: PSTR szCmdLine, int iCmdShow)
: {
: static char szAppName[] = "SvmToy"; // 실행파일명
: MSG msg;
: WNDCLASSEX wndclass;
:
: wndclass.cbSize = sizeof(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(BLACK_BRUSH);
: wndclass.lpszMenuName = NULL;
: wndclass.lpszClassName = szAppName;
: wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
:
: RegisterClassEx(&wndclass);
:
: main_window = CreateWindow(szAppName, // window class name
: "SVM Toy", // 윈도우 캡션
: WS_OVERLAPPEDWINDOW,// window style
: CW_USEDEFAULT, // initial x position
: CW_USEDEFAULT, // initial y position
: XLEN, // initial x size
: YLEN+52, // initial y size
: NULL, // parent window handle
: NULL, // window menu handle
: hInstance, // program instance handle
: NULL); // creation parameters
:
: ShowWindow(main_window, iCmdShow);
: UpdateWindow(main_window);
: // 포인트색 변경버튼
: CreateWindow("button", "Change", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
: 0, YLEN, 50, 25, main_window, (HMENU) ID_BUTTON_CHANGE, hInstance, NULL);
: // 분류시작 버튼
: CreateWindow("button", "Run", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
: 50, YLEN, 50, 25, main_window, (HMENU) ID_BUTTON_RUN, hInstance, NULL);
: // 화면삭제 버튼
: CreateWindow("button", "Clear", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
: 100, YLEN, 50, 25, main_window, (HMENU) ID_BUTTON_CLEAR, hInstance, NULL);
: // 화면저장 버튼
: CreateWindow("button", "Save", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
: 150, YLEN, 50, 25, main_window, (HMENU) ID_BUTTON_SAVE, hInstance, NULL);
: // 불러오기 버튼
: CreateWindow("button", "Load", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
: 200, YLEN, 50, 25, main_window, (HMENU) ID_BUTTON_LOAD, hInstance, NULL);
: // 파라미터 수정창
: edit = CreateWindow("edit", NULL, WS_CHILD | WS_VISIBLE,
: 250, YLEN, 250, 25, main_window, (HMENU) ID_EDIT, hInstance, NULL);
: // 처음부터 수정시작
: Edit_SetText(edit,DEFAULT_PARAM);
: // 포인트 색상
: brush1 = CreateSolidBrush(colors[4]);
: brush2 = CreateSolidBrush(colors[5]);
: brush3 = CreateSolidBrush(colors[6]);
:
: window_dc = GetDC(main_window);
: buffer = CreateCompatibleBitmap(window_dc, XLEN, YLEN);
: buffer_dc = CreateCompatibleDC(window_dc);
: SelectObject(buffer_dc, buffer);
: PatBlt(buffer_dc, 0, 0, XLEN, YLEN, BLACKNESS);
:
: while (GetMessage(&msg, NULL, 0, 0)) {
: TranslateMessage(&msg);
: DispatchMessage(&msg);
: }
: return msg.wParam;
: } // 실행 윈도우 설정
:
: //---------------------------------------------------------------------------
: // 파일명 얻기
: int getfilename( HWND hWnd , char *filename, int len, int save)
: {
: OPENFILENAME OpenFileName; // OpenDialog
: memset(&OpenFileName,0,sizeof(OpenFileName));
: filename[0]='\0';
:
: OpenFileName.lStructSize = sizeof(OPENFILENAME);
: OpenFileName.hwndOwner = hWnd;
: OpenFileName.lpstrFile = filename;
: OpenFileName.nMaxFile = len;
: OpenFileName.Flags = 0;
:
: return save?GetSaveFileName(&OpenFileName):GetOpenFileName(&OpenFileName);
: }
|