WindowsCE 应用程序开发(基于EVC)
来源:互联网 发布:linux设置共享文件夹 编辑:程序博客网 时间:2024/05/16 01:33
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 US0404 // 繁体中文0804 // 简体中文
可以用GetSystemDefaultLangID()) 或GetUserDefaultLangID()来获取
switch(GetSystemDefaultLangID()/*GetUserDefaultLangID()*/) {case 0x0804: break;case 0x0404:break;case 0x0409:break;}
- WindowsCE 应用程序开发(基于EVC)
- WindowsCE 应用程序开发(基于EVC)
- WindowsCE 应用程序开发(基于EVC)
- WindowsCE 应用程序开发常用功能的api(基于EVC)
- WinCE 应用程序开发(基于EVC)
- WindowsCE开发资源
- WindowsCE开发过程
- WindowsCE开发过程
- WindowsCE开发过程
- EVC、VS2005开发wince应用程序遇到的问题以及解决办法
- EVC、VS2005开发wince应用程序遇到的问题以及解决办法
- EVC应用程序打包工具
- WindowsCE
- 基于WindowsCE的GPS数…
- 基于WindowsCE的GPS数据导航系统
- EVC开发每一天
- eVC++开发实例
- EVC开发概述
- 使用UpdatePanel出现的小问题
- 一个微秒级的定时函数
- 测试方法和测试工具解决方案
- string 函数总结 (1)
- GtkComboBox 與 GtkTreeStore
- WindowsCE 应用程序开发(基于EVC)
- Intel 汇编语言程序设计(第五版)--续二
- ASP.NET_程序中常用的三十三种代码_
- 过了系统分析师
- ASP.NET2.0 GridView控件两大常见问题解决方案:始终显示页眉页脚
- Oracle 表存储参数pctfree 的设置
- Protocol Buffer(Google) 學習筆記一
- Exchange 2003企业版和标准版的区别
- 哈佛管理论丛-谁背上了猴子