春暖花开
雪化了,花开了,春天来了
posts - 149,comments - 125,trackbacks - 0

 

目前我自己只知道三种方法

一、LoadBitmap

功能:

    可从一个执行模块中载入指定的位图。

原型:

HBITMAP LoadBitmap(
  __in  HINSTANCE hInstance,
  __in  LPCTSTR lpBitmapName
);

参数:

hInstance [in]

包含位图的模块句柄

lpBitmapName [in]

’\0’结尾的字符串,包含将要载入位图资源名字。可使用MAKEINTRESOURCE将资源ID号转换。

返回值:

如果成功,返回位图句柄,否则返回NULL

备注:

    如果文件名不存在或内存不足,函数执行失败。

当不再使用LoadBitmap对象时,调用DeleteObject删除该对象。

示例:

HBITMAP hBitmap = LoadBitmap(g_hInstance, MAKEINTRESOURCEIDB_BMP);

二、SHLoadImageResource

功能:

将视图文件转换成位图文件。视图资源文件必须在资源文件中包含。

原型:

HBITMAP SHLoadImageResource (
HINSTANCE hinst,
UINT uIdImageFile
);

参数:

hinst

in】资源句柄

uIdImageFile

in】视图文件标号

返回值:

如果成功,返回位图句柄,否则返回NULL

备注:

转换文件的类型包括GIFPNGJPGICOBMP

当不再使用SHLoadImageResource对象时,调用DeleteObject删除该对象。

示例:

HBITMAP hBitmap = SHLoadImageResource(g_hInstance, IDR_IMAGE);

三、SHLoadImageFile

功能:

读取视图文件,解压并返回位图句柄。

原型:

HBITMAP SHLoadImageFile (
  LPCTSTR pszFileName

);

参数:

pszFileName 
[in] 将要载入的视图文件名

返回值:

如果成功,返回位图句柄,否则返回NULL

备注:

转换文件的类型包括GIFPNGJPGICOBMP

当不再使用SHLoadImageResource对象时,调用DeleteObject删除该对象。

示例:

    HBITMAP hBmp = SHLoadImageFile(

          (TEXT("\\My Documents\\My Pictures\\Waterfall.jpg")));

posted @ 2009-04-22 20:45 Sandy 阅读(2047) | 评论 (0)编辑 收藏
     摘要: SHELLEXECUTEINFO 和 ShellExecuteEx的简单使用  阅读全文
posted @ 2009-04-22 14:02 Sandy 阅读(35384) | 评论 (0)编辑 收藏
转: http://tech.ddvip.com/2008-09/122062103760957.html

程序中如果要使用http或socket连接服务器,需要先连接网络。ConnMgrEstablishConnectionSync函数中的CONNMGR_CONNECTIONINFO参数,不论采用IID_DestNetWAP还是IID_DestNetInternet,似乎都要依赖于手机上的接入点设置。都怪中国移动非要搞什么CMNET、CMWAP,中国特色的通信公司。

  可以自行创建一接入点。以下代码创建一个CMWAP接入点:

CString strFavoriteXml =
L"<wap-provisioningdoc>"
L"<characteristic type="CM_Networks">"
L"<characteristic type="Test_GPRS">"
L"<parm name="DestId" value="{D1D06580-C364-55ec-9421-6ACF34129C58}" />"
L"</characteristic>"
L"</characteristic>"
L"<characteristic type="CM_GPRSEntries">"
L"<characteristic type="Test_GPRS">"
L"<parm name="DestId" value="{D1D06580-C364-55ec-9421-6ACF34129C58}" />"
L"<characteristic type="DevSpecificCellular">"
L"<parm name="BearerInfoValid" value="1" />"
L"<parm name="GPRSInfoValid" value="1" />"
L"<parm name="GPRSInfoProtocolType" value="2" />"
L"<parm name="GPRSInfoL2ProtocolType" value="PPP" />"
L"<parm name="GPRSInfoAccessPointName" value="cmwap" />"
L"<parm name="GPRSInfoAddress" value="" />"
L"<parm name="GPRSInfoDataCompression" value="1" />"
L"<parm name="GPRSInfoHeaderCompression" value="1" />"
L"<parm name="GPRSInfoParameters" value="" />"
L"</characteristic>"
L"</characteristic>"
L"</characteristic>"
L"<characteristic type="CM_ProxyEntries">"
L"<characteristic type="WAP">"
L"<parm name="SrcId" value="{D1D06580-C364-55ec-9421-6ACF34129C58}" />"
L"<parm name="DestId" value="{436EF144-B4FB-4863-A041-8F905A62C572}" />"
L"<parm name="Proxy" value="10.0.0.172:80" />"
L"<parm name="Enable" value="1" />"
L"<parm name="Type" value="1" />"
L"</characteristic>"
L"</characteristic>"
L"</wap-provisioningdoc>";
  
LPWSTR pszwXMLout = NULL;
HRESULT hr = DMProcessConfigXML(strFavoriteXml, CFGFLAG_PROCESS, &pszwXMLout);
  
if ( pszwXMLout )
{
 delete [] pszwXMLout;
 pszwXMLout = NULL;
}

posted @ 2009-04-21 14:54 Sandy 阅读(938) | 评论 (0)编辑 收藏
http://radovi.javaeye.com/blog/322096这篇博客里谈到计算机计算浮点数时的舍入误差,我也在VS2005下进行了相应的实验,如下代码:

#include <iostream>

using namespace std;

int main()
{
    
double f = 4.35;

    
int a = int(f*100);

    cout 
<< a << endl;

    system(
"pause");
}

 的确打印出来的结果是434.

老男孩给出的解释是这样的:
这个问题和二进制的表示有很大关系
简单地说
计算机不能准确表示诸如1/10等一类分数

我查到了一篇文章:http://support.microsoft.com/kb/214118/zh-cn,如下,
       IEEE 754 标准是一种方法很容易操作的压缩方式存储浮点数。 Intel coprocessors 和实现浮点数学的大多数基于 PC 的程序使用此标准。
       IEEE 754 指定编号,以减少存储要求,并允许该内置二进制算法指令来处理数据以相对较快速的方式的所有微处理器上可用的二进制格式存储。 但是,是简单的、 非重复的十进制数字的某些数字转换为重复不能存储的完美的准确性的二进制数字。
      例如数 1 / 10 可以表示简单小数的十进制数字系统中:
      .1
     但是,二进制格式中的数目将十进制重复的二进制文件:
     0001100011000111000111 (和这样上)
     此数字无法表示按有限数量的空间。 因此,此数字向下舍入的大约-2.78E-17 存储。
      如果获取给定的结果执行多个的算术运算,这些舍入误差可能具有累积性。

      看来是和二进制的表示有很大关系。
posted @ 2009-04-15 13:38 Sandy 阅读(2549) | 评论 (1)编辑 收藏
很长时间没有用Cellular Emulator ,使用上都有一些遗忘. 所以千万别相信自己什么都能记住啊.

摘自: http://www.cnblogs.com/upto/archive/2007/02/14/649769.html 
         黎波老师的博客

Windows Mobile 6 SDK 中的 Cellular Emulator

现在的 Windows Mobile 设备大多数都拥有电话和其他无线通信的功能。在许多情况下,你想让你的应用程序跟这些通信功能进行交互。例如,你想在电话响起的时候,将你的应用程序播放音乐的声音调小;或者需要直接对通信硬件进行各种操作。那么开发这种类型的应用程序往往比较困难,最大的难点在于测试应用程序。

为了解决测试这种应用程序的困难,Windows Mobile 6 SDK 包含了 Cellular Emulator(蜂窝仿真器)。Cellular Emulator 让你能够在 Device Emulator 中,测试你的应用程序在各种蜂窝通信的情况下的行为。



Cellular Emulator 是一个强大的测试工具,它可以用于测试你的应用程序在蜂窝通信状况变化时的行为。用 Cellular Emulator 可以执行一些简单的测试,如:在仿真器中拨打电话,接听来电和挂断电话,发送和接收 SMS 信息等。为了让开发人员可以测试更复杂的功能,Cellular Emulator 还支持对 SIM 配置信息的修改,还有选择2G网络还是3G网络。所有这些测试工作都不需要用到一台物理设备。

要让 Cellular Emulator 和 Device Emulator 可以一起配合使用,首先你需要把他们关联起来。
1. 记下 Cellular Emulator 左下角状态栏的 COM 端口号。如 COM5。
2. 在 Device Emulator 中选择“File-->Configure...”菜单项,打开 Emulator Properties 对话框。
3. 在 Emulator Properties 对话框中选择 Peripherals 选项卡。
4. 把刚才记下的 COM 端口号输入到 Serial Port 0 文本框中。如果你在下拉列表中找不到你的端口号,可以自己输入进去。
5. 点击 OK 按钮保存设置,关闭 Emulator Properties 对话框。
6. 点击“File-->Reset-->Soft”菜单项,对仿真器进行软重置操作。



待仿真器完成重置过程并重新启动后,你将会看到仿真器的蜂窝网络已经可用了。如果还是不行,可能是安装了 Windows Mobile 6 SDK 之后,没有重新启动系统的原因吧。

给仿真器拨打电话
打开 Cellular Emulator 的 Call Manager 选项卡,在 Phone Number 文本框中输入任意一个电话号码,点击旁边的 Dial 按钮,仿真器的电话铃声将响起,并显示来自所输入的电话号码的来电。这时在 Active Calls 列表中将出现仿真器上的活动通话,Status 显示为 Incoming。
用7272024这个电话号码向仿真器拨打电话:


仿真器收到电话号码为7272024的来电:


从仿真器拨打电话
Preset Number 列表中提供了4个可供测试的电话号码。Busy 表示线路忙,Reject 表示拒绝接听,Hang Up After Connect 表示接听后再挂断,No Answer 表示没有回应。尝试在仿真器中拨打7272021,Cellular Emulator 的 Active Calls 列表将显示仿真器当前的活动通话。电话接通后持续了10秒钟,然后挂断,也就是Hang Up After Connect




向仿真器发送 SMS 信息
打开 Cellular Emulator 的 SMS 选项卡,在 Send to device 的多行文本框中输入短信内容,然后点击 Send 按钮将短信发送至仿真器。


仿真器将收到新短信:


还可以设置重复发送。选中 Repeatly 检查框,设定好 Interval(间隔时间)和 Max Count(最大数目),然后再点击 Send 按钮即可。如果你在仿真器中回复了信息,将会在 Cellular Emulator 的 Receive from device 列表中看到你回复的短信。


选择网络
打开 Cellular Emulator 的 Network 选项卡,可以选择2G或者3G网络,断开 GPRS 连接,查看数据通道等。


执行和查看 AT 命令
打开 Cellular Emulator 的 Injection 选项卡,这里可以向仿真器发送 AT 命令或事件。


打开 Cellular Emulator 的 AT log 选项卡,可以看到刚才所有对仿真器的操作对应的 AT 命令。


使用配置文件
这里可以选择使用哪一个 SIM 配置文件,文件内容是 XML 格式。


总结
有了 Cellular Emulator 的配合,Device Emulator 显得更加强大。现在 Windows Mobile 6 开发人员可以使用仿真器进行开发和测试,而不需要购买各种真实设备。遗憾的是,Cellular Emulator 并不支持 Windows Mobile 5.0 和 Windows Mobile 2003 的仿真器。不过好在 Windows Mobile 6 的 API 跟 Windows Mobile 5.0 的绝大部分一样,所以你可以在 Windows Mobile 6 的仿真器中开发和调试 Windows Mobile 5.0 的应用程序。对于 Windows Mobile 2003 可能测试效果没有那么一致,你也可以自己尝试一下。

参考:
What's New for Developers in Windows Mobile 6

posted @ 2009-04-15 09:59 Sandy 阅读(1925) | 评论 (0)编辑 收藏
        昨天一直在调一段代码,流程是这样的:我在某个界面程序里先放置了一个对话框A,用户选择是或否。选择是后,会再弹出一个对话框B,并触发一个事件,然后再启动一个对话框C。这些对话框是模态的。

        逻辑感觉很对,没有问题。但是界面的异常让我是头疼。A对话框选择是后,B对话框显示不完全,在C对户框显示的时候,文字显示又有异常。检查了一下,原来EndDialog没有执行成功。使用GetLastError获取的错误值也是正确的。
  
        惆怅了……,后来利用线程,去执行那个事件,界面也正常了。

        这是为什么呢?
         我个人觉得是事件的执行影响到了界面的刷新,因为我的事件是在界面的程序里面执行的。它对界面消息进行了阻塞,导致界面不能刷新。
          这个问题,不是我第一次遇到,以前也遇到过这样的问题,没有总结。总结一下,不要再犯了。
  
posted @ 2009-04-14 09:10 Sandy 阅读(379) | 评论 (0)编辑 收藏

Windows Mobile上联系人的信息可分别存储在手机和SIM卡中。我尝试过从手机,即所谓的Outlook联系人中读取联系人的信息,但是还没有尝试过从sim卡中读取联系人的信息,心里也一直默认为难吧。今天查了一下,发现竟然这么简单,相比outlook的读取方式来说,简单很多。

我们先来定义个结构

typedef struct {
  TCHAR szName[32];
  TCHAR szTelNum[32];
}CONTACTSTRUCT;

要使用SIM的相关文件,需要包含头文件 simmgr.h

首先要初始化一下
HSIM lphSim;  
 HRESULT hr = SimInitialize(0, NULL, 0, &lphSim);
if(FAILED(hr))  
 {
  return;
 }

其次获取总共使用的多少条记录与总共可以容纳的记录条数  
 DWORD dwUsed,dwTotal;  
 hr = SimGetPhonebookStatus(lphSim, SIM_PBSTORAGE_SIM, &dwUsed, &dwTotal);

然后我们读取联系人的信息
定义一个
std::vector<CONTACTSTRUCT> vContact;

 for(int i=0; i<dwTotal; i++)      
 {
  //对结构初始话以下  
  SIMPHONEBOOKENTRY phoneent;  
  memset(&phoneent,0,sizeof(phoneent));  
  phoneent.cbSize = sizeof(phoneent);

  if (SUCCEEDED(SimReadPhonebookEntry(lphSim, SIM_PBSTORAGE_SIM, i+1, &phoneent)))
  {
   CONTACTSTRUCT tempContact = {0};

   wcsncpy(tempContact.szName, phoneent.lpszText, 31); // 姓名
   wcsncpy(tempContact.szTelNum, phoneent.lpszAddress, 31); // 电话

   vContact.push_back(tempContact );
  }
 }

 //最后别忘了清理      
 SimDeinitialize(lphSim);
 lphSim = NULL;

这里读取的时候用了dwTotal,是因为听有经验的人说,sim卡的存储可能不连续,如果用dwUsed的话,可能会有问题。

积累一下,有时间再好好看一下outlook联系人的。

参考文章:
Pocket 中获取SIM卡中联系人信息
http://blog.csdn.net/xulg1984/archive/2008/05/30/2497712.aspx

posted @ 2009-04-09 15:20 Sandy 阅读(3047) | 评论 (0)编辑 收藏
     摘要: 意气风发、踌躇满志,不觉感叹万千……本文是自己工作6年的经历沉淀或者经验提炼,希望对所有的软件工程师们有所帮助,早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议,前面几点旨在确定大的方向,算是废话吧。  1、分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域...  阅读全文
posted @ 2009-04-08 13:48 Sandy 阅读(285) | 评论 (1)编辑 收藏

转自: http://www.cnblogs.com/dotnetearthworm/archive/2009/02/02/1382488.html

.sln
:解决方案文件,为解决方案资源管理器提供显示管理文件的图形接口所需的信息。

.csproj:项目文件,创建应用程序所需的引用、数据连接、文件夹和文件的信息。

.aspx:Web 窗体页由两部分组成:视觉元素(HTML、服务器控件和静态文本)和该页的编程逻辑。Visual Studio 将这两个组成部分分别存储在一个单独的文件中。视觉元素在.aspx 文件中创建。

.ascx:ASP.NET的用户控件(也叫做“pagelets”),是作为一种封装了特定功能和行为(这两者要被用在Web应用程序的各种页面上)的Web页面被开发的。一个用户控件包含了HTML、代码和其他Web或者用户控件的组合,并在Web服务器上以自己的文件格式保存,其扩展名是*.ascx。ASP.NET里的缺省配置并不允许Web客户端通过URL来访问这些文件,但是这个网站的其他页面可以集成这些文件里所包含的功能。

.aspx.cs:Web 窗体页的编程逻辑位于一个单独的类文件中,该文件称作代码隐藏类文件(.aspx.cs)。

.cs: 类模块代码文件。业务逻辑处理层的代码。

.asax:Global.asax 文件(也叫做 ASP.NET 应用程序文件)是一个可选的文件,该文件包含响应 ASP.NET 或 HTTP 模块引发的应用程序级别事件的代码。

.config:Web.config 文件向它们所在的目录和所有子目录提供配置信息。

.aspx.resx/.resx:资源文件,资源是在逻辑上由应用程序部署的任何非可执行数据。通过在资源文件中存储数据,无需重新编译整个应用程序即可更改数据。 51aspx.com

.XSD:XML schema的一种.从DTD,XDR发展到XSD

.pdb:PDB(程序数据库)文件保持着调试和项目状态信息,从而可以对程序的调试配置进行增量链接。

.suo:解决方案用户选项,记录所有将与解决方案建立关联的选项,以便在每次打开时,它都包含您所做的自定义设置。

.asmx:.asmx文件包含 WebService 处理指令,并用作 XML Web services 的可寻址入口点 51aspx。

.vsdisco(项目发现)文件 基于 XML 的文件,它包含为 Web 服务提供发现信息的资源的链接 (URL-51aspx )。

.htc:一个HTML文件,包含脚本和定义组件的一系列HTC特定元素.htc提供在脚本中implement组件的机制

来源: .Net中文社区(http://www.aspxcs.net/)

上面是我看到的一些介绍,这里再补充一些:
  .clw   支持ClassWizard  
  .ncb   支持ClassView  
  .opt   保存工作空间的配置  
  .aps   支持ResourceView  
  .bsc   浏览器信息文件  
  .dsp   项目文件  
  .dsw   工作空间文件  
  .mak   外部的创建文件  
  .plg   建立日志文件 

posted @ 2009-04-08 13:43 Sandy 阅读(1212) | 评论 (3)编辑 收藏
 对于warning C4005: 'WINVER' : macro redefinition的处理

 在Windows.h中有如下定义:  
  #ifndef   WINVER  
  #define   WINVER   0x0400  
  #endif  
  如果你把#define   WINVER   0x500置于#include   <windows.h>之前,就不会出现警告.   

摘自:http://topic.csdn.net/t/20020103/15/456195.html
posted @ 2009-04-07 15:22 Sandy 阅读(8040) | 评论 (0)编辑 收藏
仅列出标题
共15页: First 5 6 7 8 9 10 11 12 13 Last