2012-09-10 34 views
1

我有一个应用程序,我想添加一个图片控件并在其中显示一些位图图像。但是,我无法将控制变量添加到图片控件。无法添加控制变量

在开始时,我甚至无法添加变量。因为我的头文件中没有enum {IDD = ID_OF_MY_DIALOG;}行。我修好了它。但是,现在,我无法添加控制变量。当我右击一个图片控件,并点击添加变量线,我不能选择控制变量复选框。

如何将控制变量添加到我的项目中,如何动态显示位图,或者我的错误在哪里?

我测试了一些MFC应用程序并看到了控制变量部分。所以,我的项目中一定有一些缺失 - 我想。

这里是我的截图:

Add Variable Screen in my ATL project

Add Variable Screen in a random MFC project

非常感谢你。

回答

2

假设您将STATIC控件添加到对话框模板中。在模板编辑器中,在控制属性中,您可以指定一个标识符,例如IDC_PICTURE。从那里 - 控制器已经将在运行时为您创建。在代码中,您将添加CWindow变量,并且在您的OnInitDialog处理程序中(我假设您已经拥有它 - AFAIR它是默认创建的,并且存在各种样本),您将添加成员变量初始化,以便它可用于您的代码进一步的东西如消息处理。

class CMainDialog : 
    public CDialogImpl<CMainDialog> 
{ 
// ... 
private: 
    CWindow m_PictureStatic; 
    HBITMAP m_hPictureBitmap; 

// Window Message Handlers 
    LRESULT OnInitDialog(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 
    { 
     m_PictureStatic = GetDlgItem(IDC_PICTURE); 
     m_hPictureBitmap = LoadBitmap(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDB_PICTURE)); 
     ATLASSERT(m_hPictureBitmap); 
     m_PictureStatic.SendMessage(STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) m_hPictureBitmap); 
     // ... 
    } 
    LRESULT OnDestroy(UINT nMessage, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 
    { 
     ATLVERIFY(DeleteObject(m_hPictureBitmap)); 
     return 0; 
    } 

画面本身(在此代码段,可能有其他的选择)具有标识符IDB_PICTURE位图的资源。代码从资源加载位图并将其传递给控件。

enter image description here

Source Code + Source Code before adding Picture Static

+0

再次感谢您的回复。我现在有一些问题。你能检查一下吗?我找不到解决方案,但仍然无法正常工作。我上传了一些截图来显示你的东西,并添加了错误信息(在我点击确定/取消按钮后)[这里](https://www.dropbox.com/s/z26g80dujrowa4i/loadBitmapP.PNG)。位图不在这里,也不在图片控件中。 [截图在这里。](https://www.dropbox.com/s/z26g80dujrowa4i/loadBitmapP.PNG)。再一次非常感谢你。 –

+0

我添加了像这样的资源位图:'HBITMAP hBitmap = LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1));'但是,它仍然失败。不要嘲笑我,但我的OnInitDialog()中没有任何句柄实例。非常感谢你。 –

+1

我更新了旧项目,现在加载位图,请参阅上面更新的答案和源代码链接。 –