2013-07-15 8 views
1

C++에서 winAPI 응용 프로그램을 만듭니다. 미리보기 창에 사진이 있으며 클릭 할 때 다음 버튼과 이전 버튼을 만들고 싶습니다. 다음 페이지.winAPI의 다음 및 이전 제어 버튼을 사용하여 다음 페이지로 이동합니다. (C++)

제 생각에 C++에서 어떻게 할 수 있습니까?

HWND hwndButton1 = CreateWindow(L"BUTTON",L"NEXT",WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,550,800,100,30,m_hwndPreview,(HMENU)buttonid1,(HINSTANCE)GetWindowLong(m_hwndPreview, -6),NULL); 

    HWND hwndButton2 = CreateWindow(L"BUTTON",L"PREVIOUS",WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,650,800,100,30,m_hwndPreview,(HMENU)buttonid2,(HINSTANCE)GetWindowLong(m_hwndPreview, -6),NULL); 

다음 두 버튼 클릭에 대한 WM_COMMAND를 사용하여 -

내가 QT의 libraray를 사용해야하거나이 같은 WinAPI를의 내장 함수에서를 사용하여 수행 할 수 있습니다 마십시오.

나는 가고 있니?

그냥 내 API 응용 프로그램이 .pdf 확장 파일처럼 작동하기를 원합니다. PDF 파일에서와 같이 위아래 화살표를 클릭하면 다음 페이지로 이동할 수 있습니다. winAPIC++에서 나는 할 수 없습니다. 이러한 화살표 함수를 찾으십시오. 다음 화살표로 이동하는 화살표/위/아래 함수가 있는지 알려주세요 (왜냐하면 createwindow 함수를 사용하여 NEXT 및 PREVIOUS 버튼을 만드는 데 관심이 없기 때문입니다).

+1

"나는 곧 갈 거니?" 안돼. Qt 응용 프로그램을 작성하는 경우 CreateWindow를 직접 사용하거나 Windows 메시지를 사용할 필요가 거의 없습니다. Qt가 API 특정 부분을 처리합니다. – drescherjm

+0

은 @drescherjm에 동의합니다. qt의 전체 목적입니다. 크로스 플랫폼 프로그램을 만들려면 Qt가이를 처리하도록하거나 Qt를 전혀 사용하지 마십시오. – Shf

+0

나는 질문을 오해 한 것 같습니다.예, 베어 메탈 WinAPI를 사용하여 다음 및 이전 버튼을 만들 수 있지만, 일반적으로 Qt, MFC, WTL, wxWidgets와 같은 프레임 워크를 사용하는 것보다 더 많은 작업이 필요합니다. 그러나 그렇습니다. winapi에는 화살표 기능이 없습니다. 직접 구현해야합니다. – drescherjm

답변

1

사용 도구가 무엇인지 언급하지 않았으므로 리소스 편집기가 있는지 잘 모릅니다. 도구에 적합한 포럼에서이를 조사해야합니다. 단추를 만드는 코드 한 줄을 작성하는 것이 "매우 복잡합니다"라고 생각하면 더 나은 도구가 필요합니다.

단추가 그림 위에 나타나지 않게하려면 다른 단추가 있어야합니다. 한 가지 공통적 인 가능성은 툴바입니다.

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760435(v=vs.85).aspx

버튼에 화살표를 그릴 수있는 리소스 편집기와 함께 : 메인 창 상단 또는 하단 버튼위한 스트립이다. 리소스 편집기가 없으면 버튼 텍스트를 유니 코드 화살표로 설정할 수 있습니다.

SetWindowText (hwndButton1, L "\ x25bc"); // 아래쪽 화살표는 위쪽 화살표에 25b2를 사용합니다.

+0

감사합니다 ScottMcP .. 나는 버튼 usiong 도구 모음 refernce http : //를 만들기 위해 노력하고 있어요 msdn.microsoft.com/en-us/library/windows/desktop/hh298381(v=vs.85).aspx 및 내 코드 is_ LRESULT tr1 = SendMessage (hWndToolbar, TB_SETIMAGELIST, (WPARAM) ImageListID, (LPARAM) g_hImageList); 하지만 내가 디버깅 할 때 tr1 = 0 따라서 개미 도구 모음을 표시하지 않는 동일한 다른 SendMessage 함수를 사용하여 조건입니다 .. 제발 말할 수있는 문제가 무엇입니까 ?? g_hImageList 후 모든 메시지 함수를 보내고 0을 반환하고 컴파일 오류가 없습니다. – Sss

+0

하지만 몇 가지 내가 말하고 싶은 것은 무엇입니까 첫 번째 컴파일에 대한 IDM_NEW, IDM_OPEN undefined 정의 된 오류를 제공했다 그래서 그들을 정의한 #define IDM_NEW 100하지만 미리보기 창에 툴바를 표시하지 않는 역할이 없다고 생각합니다. – Sss

1

대부분의 단추 및 기타 컨트롤은 리소스 편집기를 사용하여 컨트롤을 대화 상자 서식 파일이나 도구 모음 리소스에 배치합니다. 그렇게하면 대화 상자 또는 도구 모음을 만들 때 Windows에서 단추를 만듭니다. 이 방법은 Windows가 사용중인 화면 설정에 필요한대로 단추의 크기를 조정하므로 더 선호됩니다.

할 수없는 경우 수행중인 것처럼 CreateWindow를 사용해야합니다.

+0

@ ScottMcP .. 일단 내가 당신이 그것을위한 해결책을 가지고 있다고 확신하기 때문에이 링크에 질문 한주의 사항을 알려주세요. http://stackoverflow.com/questions/18097646/how-to-create-a- 스트립 - 계속 - 버튼 - 그것에 - 사용 - 리소스 편집기 - 비주얼 - C를? noredirect = 1 # comment26491888_18097646 – Sss

1

마지막으로 완료되었습니다 .. Qt를 사용하거나 createWindowEx를 사용하지 않고 버튼을 만들었습니다. 따라 가기 가장 쉽고 쉬운 방법은 리소스 편집기입니다. (내 경우) 대화 및 사용 IDD_MAINDIALOG에 대한 몇 가지 버튼

m_hwndPreview = CreateDialogParam(g_hInst,MAKEINTRESOURCE(IDD_MAINDIALOG), m_hwndParent,(DLGPROC)DialogProc, (LPARAM)this); 

다음

BOOL CALLBACK AMEPreviewHandler::DialogProc(HWND m_hwndPreview, UINT Umsg, WPARAM wParam, LPARAM lParam) 
    { 
switch(Umsg) // handle these messages 
     { ......... 
} 
.... 
} 

그리고 그게 전부 완료. 아주 쉬운 일.