2017-07-29 130 views
0

我想在我的窗口中實現一個列表框和一個滑塊。 我使用devcpp,而不是視覺工作室。C++ win32 listbox和slider創建windows應用程序

我已經找到了一種方法來做到這一點,我沒有發現任何東西,除了像MSDN.microsoft.com提供的理論的東西。

我想要一個例子,實現列表框和滑塊的最小類型的代碼。 這是更接近和最有幫助的鏈接,但它仍然使用visual studio。 謝謝。

+0

更好地利用對話框模板,最短,最簡單的方法來處理通用控件 – Asesh

+0

下面是在MSDN的例子[如何建立一個列表框(https://msdn.microsoft.com /en-us/library/windows/desktop/hh298365(v=vs.85).aspx)和[如何建立一個trackbar](https://msdn.microsoft.com/en-us/library/windows/desktop /hh298370(v=vs.85).aspx)aka滑塊。第一個控件使用[WC_LISTBOX](https://msdn.microsoft.com/en-us/library/windows/desktop/bb775491(v = vs.85).aspx#WC_LISTBOX)類,第二個控件使用[ TRACKBAR_CLASS](https://msdn.microsoft.com/en-us/library/windows/desktop/bb775491(v = vs.85).aspx#TRACKBAR_CLASS)類。 – Ron

+0

@Ron正如我在我的問題中提到的,msdn.microsoft.com提供了代碼的代碼。這個「如何創建一個簡單的列表框」給我的錯誤,其中之一是「IDC_LISTBOX_EXAMPLE未定義」,顯然是因爲它沒有在任何地方定義,我不知道如何定義它。 另外,我如何導入「WC_LISTBOX」和「TRACKBAR_CLASS」?他們會解決錯誤嗎? (我試過#include和#define,它給了我錯誤) –

回答

1

我發現了我正在尋找的東西,似乎這是整個互聯網上唯一編寫列表框的示例代碼。爲了運行它:下載並打開devC++(我使用)或任何其他類型的編譯器,打開一個新的Windows應用程序項目(否則它將無法工作),擦除任何默認代碼,粘貼此代碼並運行它。

而這,你是如何幫助別人學習代碼的。

http://www.dreamincode.net/forums/topic/291276-win32-listbox/

#include <Windows.h> 


#define IDC_MAIN_BUTTON 101   // Button identifier 


LRESULT CALLBACK WndProcedure(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 

HWND hWndListL; 
HWND hWndListR; 
HWND hWndButton; 


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
    MSG Msg; 
    HWND hWnd; 


    //Settings All Window Class Variables 
    WNDCLASSEX WndClsEx; 
    WndClsEx.cbSize = sizeof(WNDCLASSEX); 
    WndClsEx.style = CS_HREDRAW | CS_VREDRAW; 
    WndClsEx.lpfnWndProc = WndProcedure; 
    WndClsEx.cbClsExtra = 0; 
    WndClsEx.cbWndExtra = 0; 
    WndClsEx.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
    WndClsEx.hInstance = hInstance; 
    WndClsEx.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 
    WndClsEx.hCursor = LoadCursor(NULL, IDC_ARROW); 
    WndClsEx.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); 
    WndClsEx.lpszMenuName = NULL; 
    WndClsEx.lpszClassName = "My Window"; 


    //Register Window Class 
    RegisterClassEx(&WndClsEx); 


    //Create Window 
    hWnd = CreateWindowEx(NULL, "My Window", "Windows Application", WS_OVERLAPPEDWINDOW, 200, 200, 640, 480, NULL, NULL, hInstance, NULL); 



    SendMessage(hWndListL, LB_ADDSTRING, NULL, (LPARAM)"one"); 
    SendMessage(hWndListL, LB_ADDSTRING, NULL, (LPARAM)"two"); 



    //Show Window 
    ShowWindow(hWnd, SW_SHOWNORMAL); 


    while(GetMessage(&Msg, NULL, 0, 0)) 
    { 
     TranslateMessage(&Msg); 
     DispatchMessage(&Msg); 
    } 


    return 0; 
} 



LRESULT CALLBACK WndProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) 
{ 
    char buffer[50] = ""; 


    switch(Msg) 
    { 
     case WM_CREATE: 
      //Create Listbox's 
      hWndListL = CreateWindowEx(NULL, "LISTBOX", NULL, WS_BORDER | WS_CHILD | WS_VISIBLE | ES_AUTOVSCROLL | LBS_NOTIFY, 50, 35, 200, 100, hWnd, NULL, GetModuleHandle(NULL), NULL); 
      hWndListR = CreateWindowEx(NULL, "LISTBOX", NULL, WS_BORDER | WS_CHILD | WS_VISIBLE | ES_AUTOVSCROLL | LBS_NOTIFY, 350, 35, 200, 100, hWnd, NULL, GetModuleHandle(NULL), NULL); 

      //Create Button 
      hWndButton = CreateWindowEx(NULL, "BUTTON", "OK", WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_DISABLED, 50, 220, 100, 24, hWnd, (HMENU)IDC_MAIN_BUTTON, GetModuleHandle(NULL), NULL); 

      break; 
     case WM_COMMAND: 
      switch(HIWORD(wParam)) 
      { 
       case LBN_SELCHANGE: 
       { 
        //EnableWindow(GetDlgItem(hWnd, (HMENU)IDC_BUTTON_MAIN), TRUE); 
        EnableWindow(hWndButton, true); 
        break; 
       } 
      } 
      switch(LOWORD(wParam)) 
      { 
       case IDC_MAIN_BUTTON: 
       { 
        //length = SendMessage(hWndListL, LB_GETTEXTLEN, NULL, NULL); 
        SendMessage(hWndListL, LB_GETTEXT, NULL, (LPARAM)buffer); 
        SendMessage(hWndListR, LB_ADDSTRING, NULL, (LPARAM)buffer); 
        SendMessage(hWndListL, LB_DELETESTRING, NULL, NULL); 
        EnableWindow(hWndButton, false); 
        break; 
       } 
      } 
      break; 
     case WM_DESTROY: 
      PostQuitMessage(WM_QUIT); 
      break; 
    } 

    return DefWindowProc(hWnd, Msg, wParam, lParam); 
} 
+4

請注意你的語言。 – Glorfindel

+1

我知道你很興奮,但請儘量保持你的語言在控制之下。認爲堆棧溢出更像維基百科比喜歡Reddit。 –

+0

沒有注意到,但我認爲它會自動刪除壞詞 –