Windows和MFC程序运行原理及编写方法

Windows和MFC都是消息驱动的:

操作系统为应用程序分配一个消息队列,用于处理消息:

编程过程:

Winmain()

构造窗体类

注册窗体类

造建窗体

显示

更新

消息循环

消息处理

#include
#include
#include
LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
 WNDCLASS wndcls;
 wndcls.cbClsExtra=0;
 wndcls.cbWndExtra=0;
 wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
 wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
 wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
 wndcls.hInstance=hInstance;
 wndcls.lpfnWndProc=WinSunProc;
 wndcls.lpszClassName="Weixin2003";
 wndcls.lpszMenuName=NULL;
 wndcls.style=CS_HREDRAW | CS_VREDRAW;
 RegisterClass(&wndcls);

 HWND hwnd;
 hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",WS_OVERLAPPEDWINDOW,
  0,0,600,400,NULL,NULL,hInstance,NULL);

 ShowWindow(hwnd,SW_SHOWNORMAL);
 UpdateWindow(hwnd);
/*
 MSG msg;
 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 // MessageBox(hwnd,"mouse clicked","weixin",0);
 */
 cout<<"退出程序前的"< return 0;
}

LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
 switch(uMsg)
 {
 case WM_CHAR:
  char szChar[20];
  sprintf(szChar,"char is %d",wParam);
  MessageBox(hwnd,szChar,"weixin",0);
  break;
 case WM_LBUTTONDOWN:
  MessageBox(hwnd,"mouse clicked","weixin",0);
  HDC hdc;
  hdc=GetDC(hwnd);
  TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));
  ReleaseDC(hwnd,hdc);
  break;
 case WM_PAINT:
  HDC hDC;
  PAINTSTRUCT ps;
  hDC=BeginPaint(hwnd,&ps);
  TextOut(hDC,0,0,"维新培训",strlen("维新培训"));
  EndPaint(hwnd,&ps);
  break;
 case WM_CLOSE:
  if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))
  {
   DestroyWindow(hwnd);
  }
  break;
 case WM_DESTROY:
  PostQuitMessage(0);
  break;
 default:
  return DefWindowProc(hwnd,uMsg,wParam,lParam);
 }
 return 0;
}

MFC与Windows程序一样也是消息驱动的

运等步骤如下:

第一步:theApp

第二步:int AFXApi AfxWinMain()

{

   CWinThread * pThread=AfxWinInit();

AfxWinInit();   //第三步;

pApp->InitApplication();//第四步

pThread->InitInstance();//第五步

pThread->Run();//第六步消循环

return nReturnCode;

}

第五步;

BOOL CMysdiApp::InitInstance()

{

AfxEnable Control Container();

--------

m_pMainWnd->ShowWindows(SW_SHOW);

m_pMainWnd->UpdateWindows();

return TRUE:

}

 

 

 

 

}

 

你可能感兴趣的:(C++文章)