|
|
以前一直用MFC的,最近想用API写一个游戏。在游戏中肯定有对话框的弹出,所以想写一个对话框类。
这两天一直在阅读MSDN,没弄出个所以然来
我写了一个虚基类MyDialog,里面有一个纯虚函数CreateMyDialog(),在它的派生类中用DialogBox()函数实现对话框的调用。同时派生类中还有一个DialogProc()消息处理函数。
对话框是用资源编辑器编辑好的对话框。
本来想在消息处理函数中的WM_INITDIALOG中加入对话框初始化的语句的,但是不行。老郁闷了。
主要是不能获取到对话框窗口的DC,本来我想在WM_INITDIALOG中加入hdc=GetDC(hDlg),然后SetBkColor(hdc,RGB(0,0,0)的,但是不成功。
其他的SetDlgItemText(),SetFoucs(),GetDlgItem(),EnableWindow(),这些函数都能成功调用。
基类:
#ifndef _CMyDialog_Include
#define _CMyDialog_Include
#include <windows.h>
class CMyDialog
{
public:
virtual bool CreateMyDialog(HINSTANCE hInst,DWORD sourceID,HWND hWnd)=0;
};
#endif
派生类:
#include "CStatusBox.h"
bool CStatusBox::CreateMyDialog(HINSTANCE hInst, DWORD sourceID, HWND hWnd)
{
DialogBox(hInst,MAKEINTRESOURCE(sourceID),hWnd,&CStatusBox: ialogProc);
return true;
}
INT_PTR CALLBACK CStatusBox::DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
break;
case WM_DESTROY:
break;
}
return (INT_PTR) FALSE;
}
编译是没有问题的。 |
|