游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1672|回复: 1

有没有API高手封装个对话框类啊?

[复制链接]

1

主题

11

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2009-1-7 13:06:00 | 显示全部楼层 |阅读模式
以前一直用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;
}
编译是没有问题的。

1

主题

11

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2009-1-8 19:42:00 | 显示全部楼层

Re:有没有API高手封装个对话框类啊?

搞定了;
在WM_CTLCOLORDLG消息里建立画刷,然后在返回这个画刷就可以了。
HGDIOBJECT brush;


case WM_CTLCOLORDLG:
brush=GetStockObject(BLACK_BRUSH);
return (INT_PTR)brush;
但是还是没找到设置字体颜色的方法,郁闷。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 13:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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