开始学习核心编程

来源:互联网 发布:淘宝商品分为哪些类目 编辑:程序博客网 时间:2024/05/18 01:49

转眼c已经放下N+1年了,去年就想拾起来,一直拖到了现在,幸亏基本语法尚未忘记。写此blog以鼓励和监督自己:

核心编程第一章[程序错误处理]:在此需要感谢/kf§口吕品提供的帮助,好淫呐!

以前看此章基本略过,现在因为是真要学习,所以...

int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {

   HWND hwnd = FindWindow(TEXT("#32770"), TEXT("Error Show"));
   if (IsWindow(hwnd)) {
      // An instance is already running, activate it and send it the new #
      SendMessage(hwnd, ESM_POKECODEANDLOOKUP, _ttoi(pszCmdLine), 0);
   } else {  
      DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_ERRORSHOW),
         NULL, Dlg_Proc, _ttoi(pszCmdLine));
   }
   return(0);
}

此代码J君写的的确简略,启动函数int WINAPI _tWinMain(),启动后检测有无实例运行(FindWindow()),然后(IsWindow(hwnd))判断,有则传递参数,无则创建窗体,其中创建窗体十分特别,用了DialogBoxParam(),学了一招,c++对于窗体处理起来,如果用api进行编程的话都要自己手工写,就不如C#了,但是这些都是模版性的东西,一次输入,以后用即可,一劳永逸。而J君用此DialogBoxParam()似高手之出招,无章可循,学习学习。

原来对于SendMessage,心存惴惴,因为许多程序,屏蔽了外来线程传递的消息,现在自己写接受外来send的程序,嘎嘎全部都由自己来控制了,当家作一次主人。感觉甚好。此例代码用了SendMessage传递了一个参数,都是自己的东西,这个传递可以扩展到很多。而里面又用了MAKEINTRESOURCE这个宏定义来转换资源,此为C招式之根本,资源显示出很多要用到此一招。ttoi呵呵,在tchar.h中的宏.如果是unicode,它为  
  int   _wtoi(   const   wchar_t   *string   );  
  否则为  
  int   atoi(   const   char   *string   );   
根据string 得到一个 int而已,(CString)

DialogBoxParam 显示了id为IDD_ERRORSHOW的资源,并且帮定了其事件处理过程Dlg_Proc,把_tWinMain的参数pszCmdLine传递其中可谓妙矣。
研究此启动过程用时不少,在此记录,备查。

原创粉丝点击