\t\tWinCE 应用程序开发

WinCE 应用程序开发

1、得到当前进程的HINSTANCE

HMODULE hModule = ::GetModuleHandle(NULL);

HINSTANCE hInst = hModule;

 

2、得到当前进程的绝对路径

GetModuleFileName()函数,该函数的第一个参数如果为NULL,则返回最后一个发出WM_CREAT 消息的文件的绝对路径。

 

3、手工创建状态栏上应用程序的图标

CreateStatusIcon函数就是调用CreateIconIndirect用来手工创建16x16图标

 

4、用点对点消息队列进行进程间通信

CreateMsgQueue();

OpenMsgQueue();

GetMsgQueueInfo();

ReadMsgQueue();

WriteMsgQueue();

CloseMsgQueue();

RequestDeviceNotifications();

 

5.隐藏taskbar的几种方法:

5.1全屏时隐藏,退出全屏时显示,在这种情况下可以先Findwindow(“HHTASKBAR”),然后用movewindow移出全屏范围之外,需要时再移入

5.2一直隐藏(就是从系统起来之后就不希望看到taskbar),可以通过 Findwindow,和showwindow来实现,也可以通过修改taskbar.cpp(public/shell/oak/hpc /explorer/taskbar/)中的CTaskBar::Register函数,让其直接返回true

5.3动态显示和隐藏,可以修改platform.reg文件 HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\AutoHide("default"=dword:1)和 HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\OnTop("default"=dword:0)以及 HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\SlideTaskBar("default"=dword:0)

 

6.对软件盘操作的函数:

SipGetInfo(&si)

SipSetInfo(&si)

SipShowIM(SIPF_ON)

 

7.增加或删除“开始”启动程序:

在stmenu.cpp(public/shell/oak/hpc/explorer/taskbar)中对stmenuData这个结构体数组增加或删除成员

 

8.流驱动注册表中的index:

大家都知道驱动设备的前缀prefix要用3个大写字母表示,而index则是驱动设备的索引。当在应用程序中用createfile打开设备的时候,该函数的第一个参数就是prefix和index的组合

 

9.EVC中打开网页程序

SHELLEXECUTEINFO   ShExecInfo    {0};  

ShExecInfo.cbSize    sizeof(SHELLEXECUTEINFO);  

ShExecInfo.fMask    SEE_MASK_NOCLOSEPROCESS;  

ShExecInfo.hwnd    NULL;  

ShExecInfo.lpVerb    NULL;  

ShExecInfo.lpFile    TEXT("http://www.163.com ");                  

ShExecInfo.lpParameters   =NULL;          

ShExecInfo.lpDirectory    NULL;  

ShExecInfo.nShow    SW_SHOWNORMAL;          

ShellExecuteEx(&ShExecInfo); 

 

10.取得设备信息

取得设备OEM信息:

TCHAR wszMachineName[128];

SystemParametersInfo(SPI_GETOEMINFO, sizeof(wszMachineName),&wszMachineName, 0);

取得平台信息:

TCHAR wszVersion[256];

 SystemParametersInfo(SPI_GETPLATFORMTYPE, sizeof(wszVersion),&wszVersion, 0);

 

11.wince屏幕的旋转

从Windows CE 4.0开始,DEVMODE 结构多了一个属性dmDisplayOrientation,你可以通过这个属性来取得或设置屏幕旋转模式,它对应的值如下。

DMDO_0   不旋转

DMDO_90  旋转90度

DMDO_180 旋转180度

DMDO_270 旋转270度

切换屏幕旋转模式通过调用 ChangeDisplaySettingsEx 来实现,如:

DEVMODE devmode = {0};

devmode.dmSize = sizeof(DEVMODE);

devmode.dmDisplayOrientation = DMDO_90; //水平模式

devmode.dmFields = DM_DISPLAYORIENTATION;

ChangeDisplaySettingsEx(NULL, &devmode, NULL, 0, NULL);

取得当前模式的代码如下:

DEVMODE devmode = {0};

devmode.dmSize = sizeof(DEVMODE);

devmode.dmFields = DM_DISPLAYORIENTATION;

ChangeDisplaySettingsEx(NULL, &devmode, 0, CDS_TEST, NULL);

通过 devmode.dmDisplayOrientation 的值可以判断当前模式。

值得注意的是,这样切换模式并不是永久的,当设备重新起动后,就会还原为初始状态。

如果你需要在保留切换的屏幕模式,可以通过设置注册表中HKEY_LOCAL_MACHINE\System\GDI\Rotation 下的两个键值实现

Angle - DWORD    (0, 90, 180, 270)

LandscapeMode - DWORD   (0,1)

 

12.拷屏并保存为bmp图片

void SaveDCToBMP(HDC hDC,int nStartX,int nStartY,

     int nWidth,int nHeight,LPCTSTR szFileName)

{

 //定义图形色深

 int iPixel = 32;

//位图信息头

 LPBITMAPINFO lpbmih = new BITMAPINFO;

 lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

 lpbmih->bmiHeader.biWidth = nWidth;

 lpbmih->bmiHeader.biHeight = nHeight;

 lpbmih->bmiHeader.biPlanes = 1;

 lpbmih->bmiHeader.biBitCount = iPixel;

 lpbmih->bmiHeader.biCompression = BI_RGB;

 lpbmih->bmiHeader.biSizeImage = 0;

 lpbmih->bmiHeader.biXPelsPerMeter = 0;

 lpbmih->bmiHeader.biYPelsPerMeter = 0;

 lpbmih->bmiHeader.biClrUsed = 0;

 lpbmih->bmiHeader.biClrImportant = 0;

 //创建位图数据

 HDC hdcMem;

 HBITMAP hBitMap = NULL;

 CBitmap *pBitMap = NULL;

 CDC *pMemDC = NULL;

 BYTE *pBits;

 hdcMem = CreateCompatibleDC(hDC);

 hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_PAL_COLORS,(void **)&pBits,NULL,0);

 pBitMap = new CBitmap;

 pBitMap->Attach(hBitMap);

 pMemDC = new CDC;

 pMemDC->Attach(hdcMem);

 pMemDC->SelectObject(pBitMap);

 

 pMemDC->BitBlt(0,0,nWidth,nHeight,CDC::FromHandle(hDC),nStartX,nStartY,SRCCOPY);

 BITMAPFILEHEADER bmfh;//位图文件头

 ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));

 *((char *)&bmfh.bfType) = 'B';

 *(((char *)&bmfh.bfType) + 1) = 'M';

 bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

 bmfh.bfSize = bmfh.bfOffBits + (nWidth * nHeight) * iPixel / 8;

 int iBMPBytes = nWidth * nHeight * iPixel / 8;

 CFile file;

 if(file.Open(szFileName,CFile::modeWrite | CFile::modeCreate))

 {

  file.Write(&bmfh,sizeof(BITMAPFILEHEADER));

  file.Write(&(lpbmih->bmiHeader),sizeof(BITMAPINFOHEADER));

  file.Write(pBits,iBMPBytes);

  file.Close();

 }

 

 DeleteObject(hBitMap);

 DeleteObject(hDC);

 pMemDC->DeleteDC();

 delete pMemDC; pMemDC = NULL;

 delete pBitMap; pBitMap = NULL;

 delete lpbmih; lpbmih = NULL;

}

 

13.识别当前系统语言

一般系统语言的表示是

0409 // Enaglish US

0404 // 繁体中文

0804 // 简体中文

可以用GetSystemDefaultLangID()) 或GetUserDefaultLangID()来获取

switch(GetSystemDefaultLangID()) {

case 0x0804:

break;

case 0x0404:

break;

case 0x0409:

break;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值