close

在建立一個視窗之後,總要來點什麼才像是一支程式。
首先,就來個選單吧!

還留著上次的程式碼吧!
記得要開啟『專案』的 main.cpp,而不是console版,

 

 

接著增加一個原始碼檔案。

 

1

 

 

2


不管編輯器內定了什麼檔名,我們都把它重新命名為 resouce.rc,
至於能不能自行另訂名稱呢?請自行測試。

 

 

 

3

 

 


記得在主程式 main.cpp 內修改一下選單名稱,而不再是NULL,
在此例中命名為DODO,當然啦,在resouce.rc 內也將選單名稱命名為DODO。

 

 

 

 

4

 

 

整個程式碼如下

 

 

**************************  我是可愛分隔線  **************************

 

 

resouce.rc

 

 

#define IDM_Demo1       1001    //  設定選單識別碼  
#define IDM_Demo2       1002    //  設定選單識別碼  

DODO MENU 
{
    POPUP "檔案 "
    {
      MENUITEM "&開新檔案", IDM_Demo1  
            // 請自行增加其他功能 例如: MENUITEM "&開啟舊檔", IDM_Demo11 
           // 所有想歸類在 "檔案 " 底下的功能選項都寫在這邊 
    }
    POPUP "編輯"
    {
      MENUITEM "&選取", IDM_Demo2
    }
}

 

 

**************************  我是可愛分隔線  **************************


main.cpp

 

 

#include <windows.h>

#define IDM_Demo1      1001    // 設定選單識別碼 
#define IDM_Demo2      1002    // 設定選單識別碼 


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


int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
char szAppName[] = "HelloWin";
HWND hwnd ;
MSG msg ;
WNDCLASSEX wndclass ;
wndclass.cbSize = sizeof(WNDCLASSEX) ;
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 = GetSysColorBrush(COLOR_3DFACE);
wndclass.lpszMenuName = "DODO"; // resouce.rc 內的 MENU 名稱   
wndclass.lpszClassName = szAppName ;
wndclass.hIconSm = 0 ;
RegisterClassEx (&wndclass);
hwnd = CreateWindowEx (
0,
szAppName, // window class name
"The Hello Program", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}


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

switch (message)
{
case WM_CREATE:
       return 0 ;

   
case WM_COMMAND:                         // 增加這一段程式碼 ↓ ↓ ↓ 
        switch(LOWORD(wParam))
           { 
            case IDM_Demo1:
                
            //  這裡寫希望做什麼動作的程式碼    
            
              break;
            
            case IDM_Demo2:
                
             //  這裡寫希望做什麼動作的程式碼    
                
              break;
            }                                  
        return 0 ;
                                         // 增加這一段程式碼  ↑↑↑
       

case WM_DESTROY:
      PostQuitMessage (0) ;
      return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}

 
 

 

 

5


 

 

 

 

 

 

 

 

延伸閱讀

 

 

 

[伊蒙 dev c++] 視窗程式學習筆記

 

[做中學 dev c++] dev c++

 

 

 

 

 

 

 

arrow
arrow

    伊蒙‧普羅客 發表在 痞客邦 留言(6) 人氣()