⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 desktop.c

📁 用SMART2200低成本的实现OV9650摄像头驱动
💻 C
字号:
/***************************************************************************** 文件名:desktop.c* 功能:MiniGUI应用例子。*       创建一个无边框和标题的桌面窗口,然后在桌面上显示6个图标按钮,*       使用按键进行选择操作。****************************************************************************//* 包含MiniGUI的配置头文件(编译配置选项) */#include "MiniGUI_config.h"/* 包含MiniGUI头文件 */#include "common.h"#include "minigui.h"#include "gdi.h"#include "window.h"#include "control.h"/* 主窗口起始位置及大小 */#define  MWINDOW_LX	0      	/* 窗口左边框的x值 */#define  MWINDOW_TY	0      	/* 窗口上边框的y值 */#define  MWINDOW_RX	239     /* 窗口右边框的x值 */#define  MWINDOW_BY	319     /* 窗口下边框的y值 *//* 包含各图片资源文件 */extern const unsigned int   start_no;extern const unsigned char  start_data[];extern const unsigned int   top_no;extern const unsigned char  top_data[];extern const unsigned int   sz_no01;extern const unsigned char  no01_data[];extern const unsigned int   sz_no02;extern const unsigned char  no02_data[];extern const unsigned int   sz_no03;extern const unsigned char  no03_data[];extern const unsigned int   sz_no04;extern const unsigned char  no04_data[];extern const unsigned int   sz_no05;extern const unsigned char  no05_data[];/*#include  "no01.c"#include  "no02.c"#include  "no03.c"#include  "no04.c"#include  "no05.c"#include  "top.c"#include  "start.c"*/HWND hMainWnd;      // 主窗口句柄const char*  menu_hz[] = { "信息",                           "服务",                           "设置",                           "其它",                           "导航",	                     }; /***************************************************************************** 名称:WinProc()* 功能:主窗口过程函数。*       处理MSG_PAINT消息,在窗口中显示6个图标。*       处理MSG_CHAR消息,进行图标菜单选择操作。* 入口参数:hWnd        窗口句柄*           message     消息*           wParam      消息附加参数1(对于不同的消息,有不同的用途)*           lParam      消息附加参数2(对于不同的消息,有不同的用途)* 出口参数:消息已处理则返回0。****************************************************************************/static int  WinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam){   static BITMAP  s_startbmp, s_topbmp;    static BITMAP  s_bmp[6];    static PLOGFONT s_font, s_font1;    static int s_sel = 0;    static int s_selbak = 0;    int	 i;    HDC  hdc;   // 定义一个图形设备上下文对象,输出字符时需要。        switch(message)    {   case MSG_CREATE:            // 装载图片资源            LoadBitmapFromMem(HDC_SCREEN, &s_startbmp, start_data, start_no, "bmp");            LoadBitmapFromMem(HDC_SCREEN, &s_topbmp, top_data, top_no, "bmp");            LoadBitmapFromMem(HDC_SCREEN, &s_bmp[0], no01_data, sz_no01, "bmp");            LoadBitmapFromMem(HDC_SCREEN, &s_bmp[1], no02_data, sz_no02, "bmp");            LoadBitmapFromMem(HDC_SCREEN, &s_bmp[2], no03_data, sz_no03, "bmp");            LoadBitmapFromMem(HDC_SCREEN, &s_bmp[3], no04_data, sz_no04, "bmp");            LoadBitmapFromMem(HDC_SCREEN, &s_bmp[4], no05_data, sz_no05, "bmp");                        // 建立逻辑字体	  		s_font = CreateLogFont( NULL, "song", "GB2312",                                FONT_WEIGHT_BOLD, FONT_SLANT_ITALIC, FONT_SETWIDTH_NORMAL,                               FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,			       			   16, 0);	  		s_font1 = CreateLogFont( NULL, "song", "GB2312",                                FONT_WEIGHT_BOLD, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL,                               FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,			       			   16, 0);			       			               break;                         case MSG_PAINT:	        hdc = BeginPaint(hWnd);         // 获得设备hdc		        	        	        	        // 显示各图标	        FillBoxWithBitmap(hdc, 0, 0, 240, 24, &s_topbmp);  	        for(i=0; i<3; i++)	        {	FillBoxWithBitmap(hdc, 10, i*80+30, 48,48, &s_bmp[i]);	            SelectFont(hdc, s_font1);	            TextOut(hdc, 18, i*80+82, menu_hz[i]); 	        }	        for(i=0; i<2; i++)	        {	FillBoxWithBitmap(hdc, 80, i*80+30, 48,48, &s_bmp[i+3]);	            SelectFont(hdc, s_font1);	            TextOut(hdc, 88, i*80+82, menu_hz[i+3]);	    	}	        	        // 显示窗口"确定""取消"菜单       	        FillBoxWithBitmap(hdc, 0, 283, 240, 37, &s_startbmp);           	        SetBkMode(hdc, BM_TRANSPARENT);	        SetTextColor(hdc, COLOR_lightwhite);	        SelectFont(hdc, s_font);	        TextOut(hdc, 15, 295, "确定"); 	 	        TextOut(hdc, 190, 295, "取消");          		        	        // 设置选中的菜单项(选择边框)	        SetPenColor(hdc, COLOR_black);	        if(s_sel<3)	        {	Rectangle(hdc, 8,s_sel*80+28, 60,s_sel*80+80);	        		    	}	    	else	    	{	Rectangle(hdc, 78,(s_sel-3)*80+28, 130,(s_sel-3)*80+80);	    	}        	        SelectFont(hdc, s_font1);	        TextOut(hdc, 40, 4, menu_hz[s_sel]);      	        EndPaint(hWnd, hdc);            // 释放设备hdc	        break;	        	    case MSG_CHAR:	    	i = 0;				// 使用i作为更新显示标志	    	switch(wParam)	    	{	case '1':		// 左移	    			if(s_sel>2) 	    			{ 	s_selbak = s_sel;	    				s_sel = s_sel-3;	    				i = 1;	    			}	    			break;	    		case '2':		// 下移	    			if(s_sel<4)	    			{	s_selbak = s_sel;	    				s_sel++;	    				i = 1;	    			}	    			else	    			{	s_selbak = 0;	    				s_sel = 4;	    					    					    			}	    				    			break;	    		case '3':		// 右移	    			if(s_sel<3)	    			{	s_selbak = s_sel;	    				s_sel += 3;	    				if(s_sel>4) s_sel = 4;	    				i = 1;	    			}	    			break;	    		case '6':		// 上移	    			if(s_sel<=0)	    			{	s_selbak = 4;	    				s_sel = 0;	    			}	    			else	    			{	s_selbak = s_sel;	    				s_sel--;	    				i = 1;	    			}	    			    			break;		    				    		case '8':		// 确定选择,执行相应的功能	    			MessageBox(hMainWnd, "功能正在建设...", "提示", MB_OK);	    			break;	    				    		default:	    			break;	    	}	    	if(i==1)	    	{	hdc = BeginPaint(hWnd);         // 获得设备hdc		    		    		// 清除旧的选择项(选择边框)	    		SetPenColor(hdc, COLOR_lightgray);	        	if(s_selbak<3)	        	{	Rectangle(hdc, 8,s_selbak*80+28, 60,s_selbak*80+80);	        		    		}	    		else	    		{	Rectangle(hdc, 78,(s_selbak-3)*80+28, 130,(s_selbak-3)*80+80);	    		} 	    	    	    	    // 设置新的选择项(选择边框)	    	    SetPenColor(hdc, COLOR_black);	        	if(s_sel<3)	        	{	Rectangle(hdc, 8,s_sel*80+28, 60,s_sel*80+80);	        		    		}	    		else	    		{	Rectangle(hdc, 78,(s_sel-3)*80+28, 130,(s_sel-3)*80+80);	    		}   	    		    		// 重新显示“确认”“取消”菜单	    		FillBoxWithBitmap(hdc, 0, 283, 240, 37, &s_startbmp);           	        	SetBkMode(hdc, BM_TRANSPARENT);	        	SetTextColor(hdc, COLOR_lightwhite);	        	SelectFont(hdc, s_font);	        	TextOut(hdc, 15, 295, "确定"); 	 	            TextOut(hdc, 190, 295, "取消");  	        	// 重新显示"TOP"菜单	            FillBoxWithBitmap(hdc, 0, 0, 240, 24, &s_topbmp); 	            SetBkMode(hdc, BM_TRANSPARENT);	        	SetTextColor(hdc, COLOR_lightwhite);	        	SelectFont(hdc, s_font1);	        	TextOut(hdc, 40, 4, menu_hz[s_sel]); 		    	        	        		        	EndPaint(hWnd, hdc);            // 释放设备hdc	    	}	    	break;        case MSG_CLOSE:            UnloadBitmap(&s_startbmp);            for(i=0; i<5; i++) UnloadBitmap(&s_bmp[i]);            DestroyLogFont(s_font);            DestroyLogFont(s_font1);	        DestroyMainWindow(hWnd);        // 销毁主窗口	        PostQuitMessage(hWnd);          // 发送MSG_QUIT消息,通知"消息循环"结束	        break;       default:	        return(DefaultMainWinProc(hWnd, message, wParam, lParam));    }    return(0);}/***************************************************************************** 名称:InitMainWindow()* 功能:建立主窗口。* 入口参数:无* 出口参数:建立成功返回1,否则返回0。****************************************************************************/int InitMainWindow(void){   MAINWINCREATE  window_info;    window_info.dwStyle = WS_VISIBLE;      window_info.dwExStyle = WS_EX_NONE;             window_info.spCaption = "";              window_info.hMenu = 0;                          window_info.hCursor = GetSystemCursor(0);       window_info.hIcon = 0;                          window_info.MainWindowProc = WinProc;           window_info.lx = MWINDOW_LX;                    window_info.ty = MWINDOW_TY;    window_info.rx = MWINDOW_RX;    window_info.by = MWINDOW_BY;    window_info.iBkColor = COLOR_lightgray;       window_info.dwAddData = 0;    window_info.hHosting = HWND_DESKTOP;                hMainWnd = CreateMainWindow(&window_info);    if(hMainWnd == HWND_INVALID) return(0);       else return(1);}/***************************************************************************** 名称:MiniGUIMain()* 功能:MiniGUI程序入口点。* 入口参数:argc    参数个数*           argv    参数字符串指针* 出口参数:返回0。****************************************************************************/int  MiniGUIMain(int argc, const char *argv[]){   MSG Msg;#ifdef _LITE_VERSION    SetDesktopRect(0,0, 800,600);#endif    InitMainWindow();       // 建立主窗口    ShowWindow(hMainWnd, SW_SHOWNORMAL);    // 显示主窗口        /* 消息循环 */    while(GetMessage(&Msg, hMainWnd))     {   TranslateMessage(&Msg);        DispatchMessage(&Msg);    }        MainWindowThreadCleanup(hMainWnd);    return(0);}/* 定义桌面接口函数 */#ifndef _LITE_VERSION		#include "dti.c"#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -