STM32F429I-DISCOでGUI
STM32F429I-DISCOで使えるemWinってGUIが面白そうなので手を出してみる・・・。
開発環境は以前の記事を参考にしてください。
いろいろネットで見ているとホントはこういう使い方じゃないんじゃないかなぁ?ってのが結構多かった気がするけど、ホントは僕が間違えているのかもw
Visual StudioのC#のアプリみたいにGUI(Widget)にタイマーを持たせれるので、シビアなリアルタイムが要求されるものだときついと思うけど、あんまりシビアじゃないのはその機能だけで希望の動作をさせることができそうです。
GUIで準備されている関数だけでかなりの高機能なものが作れます。
ネットで良く見るサンプルプログラムはボタン押下待ちでずーっとループしてたりして実用的ではない気がしたので気になってたんですが・・・。
適当にBUTTON_Create()でポコポコつくるより、
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = { { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 240, 320, 0, 0x0, 0 }, { BUTTON_CreateIndirect, "Button", ID_BUT_CHANGE_COLOR, 10, 70, 80, 50, 0, 0x0, 0 }, { TEXT_CreateIndirect, "Text", ID_TEX_PRO_TITLE, 0, 0, 195, 29, 0, 0x64, 0 }, { MULTIEDIT_CreateIndirect, "Multiedit", ID_MUL_INFO, 100, 70, 120, 160, 0, 0}, };
みたいにして、しっかり作りこむ方が良い気がしました・・・。
まぁ、個人の勝手な見解ですけどねw
ちなみに上の方で触れたタイマーですが、
WM_CreateTimer(hItem, TIMER_ID, TIMER_VAL, 0);
みたいな感じでクリエイトできます。
んで、
case WM_TIMER: hItem = pMsg->hWin; temp_int = WM_GetTimerId(hItem); if ( temp_int == TIMER_ID ) { WM_RestartTimer(pMsg->Data.v, TIMER_VAL); } break;
みたいに使うといい感じです。
気になったのが、タイマーを複数作ってIDで切り替えようとしたんですが、うまく
WM_GetTimerID()が機能しませんでした・・・。
実力不足ですみません。
とりあえずボタンを押すと3パターンほどカラーが変わるようなGUIのデモを作ってみました。
右側のスクロールできる画面にログを表示してみました!
使いやすそうなGUIなので、MP3プレーヤーとか作っても面白いかもです。
そういえば、日本語フォントは自分でつくらないと無さそうだったなぁ・・・。