找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2483|回复: 0
打印 上一主题 下一主题
收起左侧

个人总结Windows应用程序编程的基本点

[复制链接]
跳转到指定楼层
楼主
ID:262 发表于 2014-10-21 21:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. WM_CLOSE 、WM_DESTROY、WM_QUIT



我用一段程序解释:

int WinMain(…………){

…………

MSG msg;
while(GetMessage(&msg,NULL,0,0))//一开始就收到WM_QUIT消息后,立即退出循环。因为GetMessage()在MSDN中说明:当收到WM_QUIT消息后,会返回假,别的消息返回真。那么假即为0,while循环条件(为真)不满足,则退出while循环,主函数返回0。主函数一旦返回,程序的生命就彻底结束了
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}
return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{

  case WM_CLOSE://按下窗口的关闭按钮时系统发送WM_CLOSE消息
   DestroyWindow(hWnd);//放WM_DESTROY消息到消息队列并销毁窗口,注意,只是销毁窗口,程序还活着在进程里
   break;
  case WM_DESTROY://当得到先前的WM_DESTROY消息时,说明窗口已经被销毁了,接下来由PostQuitMessage(0)发送WM_QUIT消息

   PostQuitMessage(0);
   break;
  default:
   return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}





2.

VS2005以及以后版本中const char *转换为LPCWSTR的方法

VS2005默认是Unicode的,在VC 6.0中编译成功的项目在VS2005中常会出现类型错误。

经常出现的错误是:不能从const char *转换为LPCWSTR

如使用CreateDC("DISPLAY",NULL,NULL,NULL)就会报错,如果使用强制转换(LPCWSTR)"DISPLAY",虽然能够通过,但是编码会出错。

可行的办法是使用 TEXT("DISPLAY")转换,

CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);

另一种方法是:
项目菜单——项目属性(最后一个)——配置属性——常规——项目默认值——字符集,将使用Unicode字符集改为未设置即可。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表