Windows mobile应用程序自适应屏幕大小
2009-04-08 17:10
295 查看
Windows mobile平台下的应用程序经常要考虑到屏幕的大小。最常见的做法就是给不同屏幕大小定制不同的UI布局。但是这样的坏处也是显而易见。
另一个办法就是让程序根据屏幕的大小的变化来调整布局。这些代码是我从网上找到的,然后再做一些修改。先说头文件:
实现文件如下:
在应用程序里做如下处理:
另一个办法就是让程序根据屏幕的大小的变化来调整布局。这些代码是我从网上找到的,然后再做一些修改。先说头文件:
//CtrlAdapt.h typedef struct{ int iId; // 控件ID int iFlag; // 标志,表示怎样改变控件的位置或者大小 int iPercent; // 改变值占对话框改变值的百分比 RECT pos; } CtrlInfo; enum { MOVE_X = 0, // 控件在X方向(左右)移动 MOVE_Y, // 控件在Y方向(上下)移动 MOVE_X_Y, // 控件在X方向和Y方向同时移动 ELASTIC_X, // 控件在X方向(宽度)改变大小 ELASTIC_Y, // 控件在Y方向改(高度)改变大小 ELASTIC_X_Y, // 控件在X方向和Y方向同时改变大小 VECTOR_X, // 控件在X方向和Y方向同时改变大小 VECTOR_Y, // 控件在X方向和Y方向同时改变大小 VECTOR_X_Y // 控件在X方向和Y方向同时改变大小 }; void CtrlPosInit(HWND HMainWnd, RECT *rect, DlgCtrlInfo *pCtrlArray); void CtrlAdapt( HWND HMainWnd, int iOriginWidth, int iOrignHeight, DlgCtrlInfo *pCtrlArray );
实现文件如下:
//CtrlAdapt.cpp void CtrlPosInit (HWND HMainWnd, RECT *rect, DlgCtrlInfo *pCtrlArray) { GetWindowRect( HMainWnd, rect ); for ( ; pCtrlArray->iId; pCtrlArray++ ) { HWND hWndCtrl = GetDlgItem( HMainWnd, pCtrlArray->iId ); GetWindowRect( hWndCtrl, &pCtrlArray->pos ); pCtrlArray->pos.left -= rect->left; pCtrlArray->pos.right -= rect->left; pCtrlArray->pos.top -= rect->top; pCtrlArray->pos.bottom -= rect->top; } } void CtrlAdapt( HWND HMainWnd, int iOriginWidth, int iOriginHeight, DlgCtrlInfo *pCtrlArray ) { RECT rect; GetWindowRect( HMainWnd, &rect ); int iNewWidth = rect.right - rect.left; int iNewHeight = rect.bottom - rect.top; int iIncrementX, iIncrementY; iIncrementX = iNewWidth - iOriginWidth; iIncrementY = iNewHeight - iOriginHeight; for ( ; pCtrlArray->iId; pCtrlArray++ ) { HWND hWndCtrl = GetDlgItem( HMainWnd, pCtrlArray->iId ); RECT CtrlRect; GetWindowRect( hWndCtrl, &CtrlRect ); int iLeft = pCtrlArray->pos.left; int iTop = pCtrlArray->pos.top; int iRight = pCtrlArray->pos.right; int iBottom = pCtrlArray->pos.bottom; int iWidth = pCtrlArray->pos.right - pCtrlArray->pos.left; int iHeight = pCtrlArray->pos.bottom - pCtrlArray->pos.top; switch( pCtrlArray->iFlag ) { case MOVE_X: { if ( iIncrementX > 0 ) iLeft += (iIncrementX * pCtrlArray->iPercent / 100); break; } case MOVE_Y: { if ( iIncrementY > 0 ) iTop += (iIncrementY * pCtrlArray->iPercent / 100); break; } case MOVE_X_Y: { if ( iIncrementX > 0 ) iLeft += (iIncrementX * pCtrlArray->iPercent / 100); if ( iIncrementY > 0 ) iTop += (iIncrementY * pCtrlArray->iPercent / 100); break; } case ELASTIC_X: { if ( iIncrementX > 0 ) iWidth += (iIncrementX * pCtrlArray->iPercent / 100); break; } case ELASTIC_Y: { if ( iIncrementY > 0 ) iHeight += (iIncrementY * pCtrlArray->iPercent / 100); break; } case ELASTIC_X_Y: { if ( iIncrementX > 0 ) iWidth += (iIncrementX * pCtrlArray->iPercent / 100); if ( iIncrementY > 0 ) iHeight += (iIncrementY * pCtrlArray->iPercent / 100); break; } case VECTOR_X: { iLeft = iNewWidth * iLeft / iOriginWidth * pCtrlArray->iPercent / 100; iRight = iNewWidth * iRight / iOriginWidth * pCtrlArray->iPercent / 100; iWidth = iRight - iLeft; break; } case VECTOR_Y: { iTop = iNewHeight * iTop / iOriginHeight * pCtrlArray->iPercent / 100; iBottom = iNewHeight * iBottom / iOriginHeight * pCtrlArray->iPercent / 100; iHeight = iBottom - iTop; break; } case VECTOR_X_Y: { iLeft = iNewWidth * iLeft / iOriginWidth * pCtrlArray->iPercent / 100; iRight = iNewWidth * iRight / iOriginWidth * pCtrlArray->iPercent / 100; iWidth = iRight - iLeft; iTop = iNewHeight * iTop / iOriginHeight * pCtrlArray->iPercent / 100; iBottom = iNewHeight * iBottom / iOriginHeight * pCtrlArray->iPercent / 100; iHeight = iBottom - iTop; break; } } MoveWindow( hWndCtrl, iLeft, iTop, iWidth, iHeight, FALSE ); } UpdateWindow( HMainWnd ); }
在应用程序里做如下处理:
static DlgCtrlInfo sSettingCtrlArray[] = { { IDC_STATIC_DEFAULT_INPUT, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_STATIC_FONT_SIZE, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_STATIC_IMAGE, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_STATIC_BOX, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_STATIC_CHARSET, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_COMBO_DEFAULT_INPUT, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_COMBO_FONT_SIZE, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_COMBO_PICTURE, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_COMBO_CHARSET, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_CHECK_FUZZY_K_G, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_CHECK_FUZZY_F_H, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_CHECK_FUZZY_L_N, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_CHECK_FUZZY_Z_ZH, VECTOR_X, 100, { 0, 0, 0, 0 } }, { IDC_CHECK_FUZZY_EN_ENG, VECTOR_X, 100, { 0, 0, 0, 0 } }, { 0, 0, 0, { 0, 0, 0, 0 } } }; RECT s_SettingDlgOriginRect; WindowNCtrlPosInit(hWnd, &s_SettingDlgOriginRect, sSettingCtrlArray); ReMoveWindowNCtrl( hWnd, s_SettingDlgOriginRect.right-s_SettingDlgOriginRect.left, s_SettingDlgOriginRect.bottom-s_SettingDlgOriginRect.top, sSettingCtrlArray);
相关文章推荐
- Android应用程序自适应屏幕大小的解决办法
- [android UI]应用程序自适应屏幕大小
- android 应用程序自适应屏幕大小
- android 应用程序自适应屏幕大小
- android 应用程序自适应屏幕大小
- android 应用程序自适应屏幕大小 1
- [android UI]应用程序自适应屏幕大小
- android 应用程序自适应屏幕大小
- [android UI]应用程序自适应屏幕大小
- [android UI]应用程序自适应屏幕大小
- android 应用程序自适应屏幕大小
- [android UI]应用程序自适应屏幕大小
- [android UI]应用程序自适应屏幕大小
- 用CSS3的@media属性根据屏幕大小做自适应各种分辨率网页显示版本-media_query详解
- 如何设计自适应屏幕大小的网页
- Android自适应屏幕大小和layout布局
- Android自适应不同分辨率或不同屏幕大小的layout布局(横屏|竖屏)
- 设置竖直的分割符【使用div】 (根据屏幕的大小自适应)
- Android自适应屏幕大小和layout布局(横屏|竖屏)
- android自适应屏幕方向和大小