emWin的2D绘图需要在回调函数内或者使用WM_SelectWindow()选择窗口并放在GUI_Exec()等之后才能正常显示,这点有很多别的帖子有详细解释,但是很多时候一定要在这两种情况之外的话可以在绘图前添加GUI_MULTIBUF_Begin(),绘制完成后添加GUI_MULTIBUF_End()显示。
简单举例如下:
GUI_MULTIBUF_Begin();
WM_SelectWindow(hWin);
GUI_SetPenSize(5);
GUI_DrawLine( 0, 0, 150, 0);
GUI_MULTIBUF_End();
GUI_Exec();
注意GUI_MULTIBUF_Begin()之后的绘图操作会在GUI_MULTIBUF_End()时一起显示,可以通俗的理解为遇到GUI_MULTIBUF_Begin()时拿出了一张透明纸,我们在上面完成一系列的绘画直到遇到GUI_MULTIBUF_End()时把这张纸直接放在WM_SelectWindow选择的那个窗口上。
关于这两个函数的官方解释如下: