傳統上認為windows視窗程式只能由Visual C來寫,但其實自由軟體也是能做的。
一樣使用CodeBlocks,但必須增加 compiler 稱作 mingw 的,
這是個支援windows程式開發的compiler。
不過現在的 CodeBlocks 在下載頁面 已經增加了包裹mingw的版本。
下載附有mingw的安裝後即可直接使用 |
我們使用Resource Edit 資源編輯器,在資源編輯器將視窗畫好之後,
會自動產生 rc 檔 和 resource.h 供呼叫使用。
本實驗室最開始安裝就是這個版本。
所以一樣先建立個空白專案,我們不選擇內建的 Win32 GUI Project 樣式,因為那是C++的。
建立新專案和之前msp430的模式一樣,但是compiler選擇 GNU GCC Compiler |
然後建立個 main.c 檔。
這個 main.c 檔用是 dailog 視窗法,這樣曾能夠輕易地從資源編輯器做設計。
檔案內容為:
#include "resource.h"
#include <windows.h>
HINSTANCE hInst;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int iCmdShow)
{
MSG msg;
HWND hwnd;
hInst = hInstance;
hwnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, WndProc) ;
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_CLOSE:
DestroyWindow(hwnd);
return TRUE;
break;
case WM_DESTROY:
PostQuitMessage(0);
return TRUE;
};
return FALSE;
}
所有windows程式的幾乎都差不多是這個形式,至於這個程式為什麼是長這個樣子,
可以去問問微軟或者是參考書本 Programming Windows第五版
或者看看 theForger's Win32 API Programming Tutorial
學習windows的程式方法。
就像做msp430的開發時一樣,專案設定裡,
CodeBlocks 的設定 Project >> Properties >> Build Targets 要修改點設定
Types 要改為 GUI application |
接者使用 ResEdit 編一個視窗
設定編好的資源叫做rc檔,並且儲存在你程式的目錄下。 |
隨便開個Dialog視窗 |
按下儲存後,資源編輯器會產生兩個檔案,resource.h 檔內容是
#ifndef IDC_STATIC
#define IDC_STATIC (-1)
#endif
#define IDD_DIALOG1 100
// Generated by ResEdit 1.6.6
// Copyright (C) 2006-2015
// http://www.resedit.net
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"
//
// Dialog resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG1 DIALOG 0, 0, 186, 95
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "Ms Shell Dlg"
{
PUSHBUTTON "Cancel", IDCANCEL, 129, 24, 50, 14, 0, WS_EX_LEFT
DEFPUSHBUTTON "OK", IDOK, 129, 7, 50, 14, 0, WS_EX_LEFT
}
其中 resource.h 內描述了這個dialog視窗的代號,寫著100。
而 Dialog.rc 內描述了視窗的大小、位置、使用字形,有什麼按紐之類的,
當然如果寫程式的人很厲害要人工撰寫這些內容也不是不行...
注意,要呼叫視窗成功,在main.c的程式中
hwnd = CreateDialog(hInstance, MAKEINTRESOURCE( IDD_DIALOG1 ), 0, WndProc) ;
紅字中的 IDD_DIALOG1 和 resource.h 檔內描述的必須一致。
將這兩個檔案加入專案中,按下Build就可以建立執行檔了。
執行後的結果:
由於在main.c中的CALLBACK WndProc 並沒有處理那兩個按鈕訊息,
所以按下也不會有任何反應的,有需要添加按鈕的功能則必須再寫上。
更詳細的windows程式寫作資訊請參考
書本 Programming Windows第五版
網站 theForger's Win32 API Programming Tutorial
而 Dialog.rc 內描述了視窗的大小、位置、使用字形,有什麼按紐之類的,
當然如果寫程式的人很厲害要人工撰寫這些內容也不是不行...
注意,要呼叫視窗成功,在main.c的程式中
hwnd = CreateDialog(hInstance, MAKEINTRESOURCE( IDD_DIALOG1 ), 0, WndProc) ;
紅字中的 IDD_DIALOG1 和 resource.h 檔內描述的必須一致。
將這兩個檔案加入專案中,按下Build就可以建立執行檔了。
執行後的結果:
由於在main.c中的CALLBACK WndProc 並沒有處理那兩個按鈕訊息,
所以按下也不會有任何反應的,有需要添加按鈕的功能則必須再寫上。
更詳細的windows程式寫作資訊請參考
書本 Programming Windows第五版
網站 theForger's Win32 API Programming Tutorial
0 意見:
張貼留言