引入:自身没有,引用外部。
插入:自身拥有,直接应用。
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