使用API建立dialog的簡單樣本

來源:互聯網
上載者:User

    首先填充DLGTEMPLATE結構體:

DLGTEMPLATE* CreateDlgData()
 {
  const int SIZE = 1024;
  WORD* pTempl = new WORD[SIZE];
  memset(pTempl, 0, sizeof(WORD)*SIZE);

  DLGTEMPLATE& dt = *((DLGTEMPLATE*)pTempl);

  dt.style = WS_OVERLAPPEDWINDOW |DS_MODALFRAME|WS_DLGFRAME;//dialog style
  dt.dwExtendedStyle = WS_EX_DLGMODALFRAME;//dialog extention style
  dt.cdit = 0;//控制項數量,這裡設為0

  pTempl += sizeof(DLGTEMPLATE);

  *pTempl++ = 0; /// menu
  *pTempl++ = 0; /// class name

  return &dt;
 }

 

    然後申明dialog視窗過程:

INT_PTR CALLBACK dialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
  switch(uMsg)
  {
  case WM_INITDIALOG:
   {

       // 這裡處理類似於MFC中OnInitialDialog的方法
   }
   break;
  }

 

///調用預設視窗處理過程

  ::DefWindowProc(hWnd, uMsg, wParam, lParam);

  return true;
 }

 

   接下來建立非模式dialog:
  DLGTEMPLATE* pDlgData = CreateDlgData();
  hDlg  = ::CreateDialogIndirectParam(hInstance, pDlgData, hParent, dialogProc, (LPARAM)this);
  delete pDlgData;

  或者模式dialog:

  DLGTEMPLATE* pDlgData = CreateDlgData();
  int nResult = ::DialogBoxIndirectParam(hInstance, pDlgData, hParent, dialogProc, (LPARAM) this);
   delete pDlgData;

 

建立過程中,會在dialogProc中收到WM_INITDIALOG訊息,可在此處添加dialog上的控制項。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.