2014-06-05 41 views
0

簡單的問題,我找不到我需要什麼,你如何使用CreateWindow函數使用代碼在win32中複選框,沒有可視化的c + +,沒有額外的幫助程序,只是windows.h?我想要一個簡單的例子,以及如何使用它?
我仍然在學習C++和win32,所以不瞭解大多數的東西,msdn也沒有給出太多的信息。如何使複選框在win32中?

+0

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

+3

通過閱讀文檔。 –

+1

而不是將問題的答案編輯爲不符合網站準則的問題,您最好花些時間仔細閱讀http://stackoverflow.com/help/how-to-ask。如果你在中途發佈了非工作代碼,這將不會脫離主題,也不會被關閉。 –

回答

4

在CreateWindowEx()的參數中,類名稱應該是BUTTON,窗口樣式應該是BS_CHECKBOX。兩者都是Windows.h中定義的內置常量。

hWnd = CreateWindowEx(NULL,BUTTON,"Checkbox",BS_CHECKBOX,xPos,yPos,width,height,parent,NULL,NULL,NULL) 

您會像處理來自其他窗口的消息一樣處理消息。

+0

謝謝,也將是很好,如果你展示如何使用這個 – Waras

+0

nwm,我有我自己的例子基於兩個答案的建議,只是我不能發佈它,並分享其他脂肪酶,因爲它的即將關閉... – Waras

+0

謝謝你的建議,我做了一個例子,如果有人需要我在這裏發佈http://msdn.microsoft.com/en-us/library/aa367854(v=vs.85) 。aspx – Waras

0

根據這個鏈接(http://www.cplusplus.com/forum/windows/40147/

的代碼應該是

#include <windows.h> 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 

static char *title = TEXT("Check Box"); 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
       LPSTR lpCmdLine, int nCmdShow) 
{ 
MSG msg ;  
WNDCLASS wc = {0}; 
wc.lpszClassName = TEXT("Check Box"); 
wc.hInstance  = hInstance ; 
wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); 
wc.lpfnWndProc = WndProc ; 
wc.hCursor  = LoadCursor(0, IDC_ARROW); 


RegisterClass(&wc); 
CreateWindow(wc.lpszClassName, title, 
      WS_OVERLAPPEDWINDOW | WS_VISIBLE, 
      150, 150, 230, 150, 0, 0, hInstance, 0); 

while(GetMessage(&msg, NULL, 0, 0)) { 
TranslateMessage(&msg); 
DispatchMessage(&msg); 
} 
return (int) msg.wParam; 
} 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 

switch(msg) 
{ 
    case WM_CREATE: 
    { 
    CreateWindow(TEXT("button"), TEXT("Show Title"), 
       WS_VISIBLE | WS_CHILD | BS_CHECKBOX, 
       20, 20, 185, 35,   
       hwnd, (HMENU) 1, ((LPCREATESTRUCT)lParam)->hInstance, NULL); 
    CheckDlgButton(hwnd, 1, BST_CHECKED); 
    break; 
    } 

    case WM_COMMAND: 
    { 
     BOOL checked = IsDlgButtonChecked(hwnd, 1); 
    if (checked) { 
     CheckDlgButton(hwnd, 1, BST_UNCHECKED); 
    SetWindowText(hwnd, TEXT("")); 
    } else { 
    CheckDlgButton(hwnd, 1, BST_CHECKED); 
    SetWindowText(hwnd, title); 
    } 
    break; 
    } 

    case WM_DESTROY: 
    { 
     PostQuitMessage(0); 
     break; 
    } 
} 
return DefWindowProc(hwnd, msg, wParam, lParam); 
} 

在論壇中,他們聲稱該代碼用來創建幾個複選框,但稍加修改可以解決這個問題。

- 快樂編程!

+0

是的,我也讀過,但一些代碼是visual C++我認爲和一些我無法理解的代碼,如'LPCREATESTRUCT)lParam) - > hInstance或'(HMENU)1' theres no such thing在我的默認創建的Win32 api中使用菜單如下: – Waras

+0

nwm,'(HMENU)1'是按鈕的實際ID – Waras

+0

@Waras如果你想學習Windows編程,堆棧溢出不是一個好的做法。給自己一份[這本經典書](http://www.charlespetzold.com/pw5/)。 –

相關問題