C语言对话框资源文件,在对话框中插入ico、菜单、图片、对话框资源

引入:自身没有,引用外部。

插入:自身拥有,直接应用。

1、软件图标ico 引入

vc++6是一个IDE,不会自带各种ico资源,所以得用外部资源,得使用引用。

单击资源文件(resource.rc)右键-->插入……-->Icon,选择引入-->选择相应的ico图片,然后命名ID为1(默认为IDI_ICON1,改成1),重新构建。

也可以单击资源文件(resource.rc)右键-->引入-->选择相应的ico图片,然后命名ID为1,重新构建。

ico制作:可以百度 ico 制作或直接去网站http://www.ico.la/

2、软件菜单 插入

因为菜单资源是vc6自身就有的资源,所以直接插入即可。

单击资源文件(resource.rc)右键-->插入……-->Menu-->新建。双击即可重命名(例如重命名为“打开文档判断关键层[&O]”,点击别处,再双击“打开文档判断关键层[&O]”就出现默认ID号,可根据自己需要重命名它,例如

ID_MENUITEMOPEN1)

建好后 单击IDD

MAIN 图框,右键属性,菜单选择刚才新建的manu(默认IDR_MENU1)即可,

子菜单 右击“文件编辑”等自己新建的按钮,右键属性 选择弹出

快捷键:在 文件(&F) 即可

分隔符:在那个子菜单按钮前勾选分隔符即可

响应菜单可以

case ID_MENUITEMOPEN1:

{

//写响应代码

}

break;

3、图片资源 引入

单击资源文件(resource.rc)右键-->引入-->文件过滤器中选择所有文件,选择相应要引入的图片(只能是bitmap24位图片,不是的话可以用windows自带的画图工具另存为转换一下)-->在窗口插入图像控件(空间bar找不到?工具--定制--工具栏-控件),选择属性位图即可。

学习自:如鹏网如鹏网

4、

插入组合框后没有下拉菜单,用以下代码

#include

#include "resource.h"

BOOL CALLBACK DlgProc(HWND,

UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE

hPrevInstance, LPSTR szCmdLine, int nCmdShow)

{

DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL,

DlgProc);

return 0;

}

BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,

LPARAM lParam)

{

HWND hCombo;

switch(uMsg)

{

case WM_INITDIALOG: //对话框的初始化

hCombo = GetDlgItem(hDlg, IDC_COMBO);

SendMessage(hCombo, CB_ADDSTRING, 0,

(LPARAM)TEXT("Qiye"));

return TRUE;

case WM_CLOSE:

EndDialog(hDlg, 0);

return TRUE;

default:

break;

}

return FALSE;

}

5、关于插入对话框,以后整理了在上传

首先:在资源中Dialog右键选择插入Dialog,会多出来一个对话框,重命名为LOGINDLG并调整控件。

然后:在Case_OK 下面添加如下代码

HINSTANCE

hInstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);

DialogBox(hInstance,

MAKEINTRESOURCE(IDD_LOGINDIALOG), NULL, Main_Proc);//不能传参数

上面就可以运行了。但是用的是Main_Proc这个主窗口的过程,子窗口要有自己的过程,上面仅能跑起来罢了,不能传递参数啥的,下面给LoginDlg弄一个过程。

过程是:每个对话框都有自己的一套MainDlg.cpp类似的代码,Main_Proc,Main_OnInitDialog

等等。新建一个LoginDlg.cpp的文档,将MainDlg.cpp里的代码复制到LoginDlg.cpp中,并将Main_Proc,Main_OnInitDialog

等的前缀变为LoginDlg_***,函数名不能重复。然后同理复制一份LoginDlg.h,把_MAIN_H变为_LOGINDLG_H,并将Main_Proc,Main_OnInitDialog

等的前缀变为LoginDlg_***,函数名也不能与不能与MainDlg.h重复。

//文件MainDlg.cpp内容如下:

#include "stdafx.h"

#include

#include

#include "resource.h"

#include "MainDlg.h"

#include "LoginDlg.h"

BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM

lParam)

{

switch(uMsg)

{

HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);

HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);

HANDLE_MSG(hWnd,WM_CLOSE,

Main_OnClose);

}

return

FALSE;

}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM

lParam)

{

return

TRUE;

}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT

codeNotify)

{

switch(id)

{

case IDC_OK:

{

HINSTANCE

hInstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);

//实验传递数字

//实验传递字符串

//实验传递结构体

//实验在MainDlg中得到用户在LoginDlg.cpp中修改的东西(改变结构体),即由LoginDlg.cpp向MainDlg传递数据

LoginData

id;

id.userName

="zhubinglong";

id.passWord

="123456";

DialogBoxParam(hInstance,

MAKEINTRESOURCE(IDD_LOGINDIALOG), NULL,

LoginDlg_Proc,(LPARAM)&id);

MessageBox(hwnd,id.userName ,TEXT(""),MB_OK);

//实验用SetWindowLong,GetWindowLong函数传递由由LoginDlg.cpp向MainDlg传递的数据而不用上面的全局变量方法了

//下面处理怎样确定用户在子窗口点击了什么,确定还是取消

int

retCode=DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_LOGINDIALOG),NULL,LoginDlg_Proc,(LPARAM)&id

);

if(1==retCode)

{

MessageBox(hwnd,TEXT("用户点击了确定"),TEXT(""),MB_OK

);

}

else

if (0==retCode)

{

MessageBox(hwnd,TEXT("用户点击了取消"),TEXT(""),MB_OK

);

}

//DialogBox(hInstance,

MAKEINTRESOURCE(IDD_LOGINDIALOG), NULL, Main_Proc);//不能

}

break;

default:

break;

}

}

void Main_OnClose(HWND hwnd)

{

EndDialog(hwnd, 0);

}

//文件LoginDlg.cpp内容如下:

#include "stdafx.h"

#include

#include

#include "resource.h"

#include "LoginDlg.h"//改变头文件,并将下面的四个Main_都改成LoginDlg_

#include "stdlib.h"//itoa

#include //sprintf

BOOL WINAPI LoginDlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam,

LPARAM lParam)

{

switch(uMsg)

{

HANDLE_MSG(hWnd, WM_INITDIALOG, LoginDlg_OnInitDialog);

HANDLE_MSG(hWnd, WM_COMMAND, LoginDlg_OnCommand);

HANDLE_MSG(hWnd,WM_CLOSE,

LoginDlg_OnClose);

}

return

FALSE;

}

BOOL LoginDlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM

lParam)

{

//在这儿处理传入参数,lParam就是传入的参数

//传入数字实验

//传入字符串实验

//传入结构体

//在MainDlg中得到用户在LoginDlg.cpp中修改的东西(改变结构体),即由LoginDlg.cpp向MainDlg传递数据

//实验用SetWindowLong,GetWindowLong函数传递由由LoginDlg.cpp向MainDlg传递的数据而不用上面的全局变量方法了

LoginData*

id=(LoginData*)lParam;

SetWindowLong(hwnd,GWL_USERDATA,(LPARAM)id);//SetWindowLong可以设置与窗口句柄关联的数据,把数据给窗口,SetWindowLong可以看作是把一些数据与窗口管理起来,“让他代为保管”

//id.userName

="lijibao";//是错误的

return

TRUE;

}

void LoginDlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT

codeNotify)

{

switch(id)

{

case IDOK:

{

TCHAR

userName[255];

TCHAR

passWord[255];

GetDlgItemText(hwnd,IDC_EDITUSERNAME,userName,sizeof(userName)/sizeof(TCHAR) );

GetDlgItemText(hwnd,IDC_EDITUSERNAME,passWord,sizeof(passWord)/sizeof(TCHAR) );

LoginData* id=

(LoginData*) GetWindowLong(hwnd,GWL_USERDATA);

id->userName

=userName;

id->passWord

=passWord;

EndDialog(hwnd,

1);

}

break;

case IDCANCEL:

{

EndDialog(hwnd,

0);

}

break;

default:

break;

}

}

void LoginDlg_OnClose(HWND hwnd)

{

EndDialog(hwnd, 0);

}

//文件LoginDlg.h内容如下:

#ifndef _LOGINDLG_H

#define _LOGINDLG_H

#include

struct LoginData

{

TCHAR* userName;

TCHAR* passWord;

};

BOOL WINAPI LoginDlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam,

LPARAM lParam);

BOOL LoginDlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM

lParam);

void LoginDlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT

codeNotify);

void LoginDlg_OnClose(HWND hwnd);

#endif

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值