audition怎么去掉人声保留人声,去掉伴奏

小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
MFC里怎么给主窗口加滚动条?
图像处理的程序一般都是多窗口的模式,现在子窗口里的滚动条是有的,但是发现当打开的子窗口很多的时候,主窗口就不够大了,所以想加个滚动条,但是不知道怎么操作。如果有高手肯不吝赐教烦请稍微详细一些,比如在哪个类哪个函数里添加什么语句。多谢,多谢!
选的是CScollView类,InitialUpdate函数里也有设窗口的大小,但是运行的时候窗口的尺寸是变了,滚动条没有唉。
运行的时候窗口的尺寸,是不是小于InitialUpdate函数里所有设窗口的大小?
MainFrm的PreCreateWindow里设了cs的大小,主窗口确实会跟着改变。不过如果尺寸设大了超出了显示器的尺寸就看不到边了,设小了也没见有滚动条出现。View的InitialUpdate里的尺寸好像是管着窗口的。
从你的代码来看,应该是你的sizeTotal太大。cs和cy分别为滚动窗口的水平、垂直分量,表明 窗口的水平、垂直方向尺寸小于其指定像素单位时将出现水平方向滚动条和垂直方向滚动条。通过修改滚动尺寸, 可改变出现滚动条的最小窗口。也就是说,你现在指定的是像素的尺寸。一般显示器的分辨率可以达到这个尺寸?
VC++中使用CscrollView代替Cview类即可实现滚动窗口。此时,系统生成OnInitialUpdate()成员函数:
void CmyscrollView::OnInitialUpdat()
CscrollView::OnIntialUpdate();
Csize sizeT
SizeTotal.cs=sizeToal.cy=100;
SetScrollSizes(MM-TEXT,sizeTotal);
这个例子里面,cs和cy分别为滚动窗口的水平、垂直分量,表明窗口的水平、垂直方向尺寸小于100像素单位时将出现水平方向滚动条和垂直方向滚动条。通过修改滚动尺寸,可改变出现滚动条的最小窗口。例如,若“sizeTotal.cx=600;sizeTotal.cy=800;”,则当窗口尺寸小于600*800时,就会出现滚动条。
OnInitialUpdate里这个sizeTotal的设置是控制子窗口的,当子窗口的PreCreateWindow是cx和cy小于这个sizeTotal的时候就会出现滚动条。决定主窗口大小的设置在MainFrm里的PreCreateWindow函数中。但我就不知道主窗口的sizeTotal在哪里设置。
研究生必备与500万研究生在线互动!
扫描下载送金币
浏览器进程
打开微信扫一扫
随时随地聊科研opencv结合MFC显示带滚动条的大图片
参考 http://blog.csdn.net/ixzf2009/article/details/6564456
的内容,结合自己的实际情况,实现了在MFC中显示IplImage 的大图片。
1. 工程是在VS2010中的基于对话框的MFC工程。
我最开始的思路是创建一个CStatic的图片控件,为其添加滚动条,发现无法实现。
此工程中的思路是创建一个BUTTON,通过为BUTTON添加背景图案来实现。
下面进行必要的流程阐述和相关代码。
A。新建一个继承自CBUTTON的ButtonPic类。
在ButtonPic.h中添加变量和函数声明
// Attributes
m_nHorzMaxS
m_nVertMaxS
m_nHorzPageS
m_nVertPageS
&&& CBitmap
&&& virtual void
DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
InitPic(int nStep,CBitmap *cbmp);
DarwPic();
B。 在对话框中添加一个BUTTON,为其关联变量,注意,变量类型需要为ButtonPic,此处变量名为m_cbtnPic
在 BOOL CDispScrollDlg::OnInitDialog()中添加代码:
// TODO: Add extra initialization here
m_cbtnPic.ShowScrollBar(SB_BOTH);
&&& CDC* pDC =
-&GetDC();&&&&&&&
// 获得显示控件的 DC
&&& HDC hDC =
-&GetSafeHdc();&&&&&&&&&&&&&&&
// 获取 HDC(设备句柄) 来进行绘图操作
&&& IplImage
*image=cvLoadImage("lena.jpg");
&&& CBitmap
*cbmp=IplImage2CBitmap(image);
m_cbtnPic.InitPic(10,cbmp);
此处IplImage2CBitmap是用来将IplImage类型转成CBitmap类型。
CBitmap * CDispScrollDlg::IplImage2CBitmap(const IplImage
&&& if( pImage
&& pImage-&depth ==
IPL_DEPTH_8U )
hDC=this-&GetDC()-&GetSafeHdc();
buffer[sizeof(BITMAPINFOHEADER) + 1024];
&&& BITMAPINFO*
bmi = (BITMAPINFO*)
&&& int bmp_w =
pImage-&width, bmp_h =
FillBitmapInfo( bmi, bmp_w, bmp_h,
pImage-&depth*pImage-&nChannels,
pImage-&origin );
*pBits=NULL;
&&& HBITMAP
hBitmap=CreateDIBSection(hDC,bmi,DIB_RGB_COLORS,(void**)&pBits,NULL,0);
memcpy(pBits,pImage-&imageData,pImage-&imageSize);
&&& CBitmap
*pBitmap=new CB
pBitmap-&Attach(hBitmap);
&&& return
&&& return
void CDispScrollDlg::FillBitmapInfo( BITMAPINFO* bmi, int width,
int height, int bpp, int origin)
&&& assert( bmi
&& width &= 0
&& height &= 0
&& (bpp == 8 || bpp == 24 || bpp ==
BITMAPINFOHEADER* bmih =
&(bmi-&bmiHeader);
&&& memset(
bmih, 0, sizeof(*bmih));
bmih-&biSize = sizeof(BITMAPINFOHEADER);
bmih-&biWidth =
bmih-&biHeight = origin ? abs(height) :
-abs(height);
bmih-&biPlanes = 1;
bmih-&biBitCount = (unsigned short)
bmih-&biCompression = BI_RGB;
&&& if( bpp == 8
&&& RGBQUAD*
palette = bmi-&bmiC
&&& for( i = 0;
i & 256; i++ )
palette[i].rgbBlue = palette[i].rgbGreen = palette[i].rgbRed =
palette[i].rgbReserved = 0;
ButtonPic.cpp 的代码贴在下方。
注意,其中两个函数OnVScroll,OnHScroll需要通过类向导建立。是用来控制滚动条的。
// ButtonPic.cpp : implementation file
#include "stdafx.h"
#include "DispScroll.h"
#include "ButtonPic.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
/////////////////////////////////////////////////////////////////////////////
// CButtonPic
CButtonPic::CButtonPic()
CButtonPic::~CButtonPic()
BEGIN_MESSAGE_MAP(CButtonPic, CButton)
//{{AFX_MSG_MAP(CButtonPic)
ON_WM_HSCROLL()
ON_WM_VSCROLL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CButtonPic message handlers
void CButtonPic::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
&&& // TODO: Add
your code to draw the specified item
DarwPic();
void CButtonPic::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar*
pScrollBar)
&&& // TODO: Add
your message handler code here and/or call default
switch(nSBCode)
&&&&&&&&&&&
m_nHorzPos = 0;
this-&SetScrollPos(SB_HORZ,m_nHorzPos);
DarwPic();
SB_LINELEFT:
SB_PAGELEFT:
&&&&&&&&&&&
m_nHorzPos -= m_nOneS
if(m_nHorzPos&0)
&&& m_nHorzPos =
&&&&&&&&&&&
this-&SetScrollPos(SB_HORZ,m_nHorzPos);
DarwPic();
SB_LINERIGHT:
SB_PAGERIGHT:
&&& m_nHorzPos
+= m_nOneS
if(m_nHorzPos&m_nHorzMaxSize)
&&& m_nHorzPos =
m_nHorzMaxS
&&&&&&&&&&&
this-&SetScrollPos(SB_HORZ,m_nHorzPos);
DarwPic();
case SB_RIGHT:
&&&&&&&&&&&
m_nHorzPos = m_nHorzMaxS
this-&SetScrollPos(SB_HORZ,m_nHorzPos);
DarwPic();
SB_THUMBPOSITION:
SB_THUMBTRACK:
&&&&&&&&&&&
m_nHorzPos = nP
this-&SetScrollPos(SB_HORZ,m_nHorzPos);
DarwPic();
CButton::OnHScroll(nSBCode, nPos, pScrollBar);
void CButtonPic::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar*
pScrollBar)
&&& // TODO: Add
your message handler code here and/or call default
switch(nSBCode)
&&&&&&&&&&&
m_nVertPos = 0;
this-&SetScrollPos(SB_VERT,m_nVertPos);
DarwPic();
SB_LINELEFT:
SB_PAGELEFT:
&&&&&&&&&&&
m_nVertPos -= m_nOneS
if(m_nVertPos&0)
&&& m_nVertPos =
&&&&&&&&&&&
this-&SetScrollPos(SB_VERT,m_nVertPos);
DarwPic();
SB_LINERIGHT:
SB_PAGERIGHT:
&&& m_nVertPos
+= m_nOneS
if(m_nVertPos&m_nVertMaxSize)
&&& m_nVertPos =
m_nVertMaxS
&&&&&&&&&&&
this-&SetScrollPos(SB_VERT,m_nVertPos);
DarwPic();
case SB_RIGHT:
&&&&&&&&&&&
m_nVertPos = m_nVertMaxS
this-&SetScrollPos(SB_VERT,m_nVertPos);
DarwPic();
SB_THUMBPOSITION:
SB_THUMBTRACK:
&&&&&&&&&&&
m_nVertPos = nP
this-&SetScrollPos(SB_VERT,m_nVertPos);
DarwPic();
CButton::OnVScroll(nSBCode, nPos, pScrollBar);
void CButtonPic::InitPic(int nStep,CBitmap *cbmp)
&&& BITMAP
LPSCROLLINFO&
&&& lpsi = new
SCROLLINFO;
this-&GetClientRect(&rc);
cbmp-&GetBitmap(&bm);
m_nHorzMaxSize = bm.bmW
m_nVertMaxSize = bm.bmH
m_nHorzPageSize = rc.Width();
m_nVertPageSize = rc.Height();
&&& m_nOneStep =
&&& m_nHorzPos =
&&& m_nVertPos =
this-&SetScrollRange(
SB_HORZ,0,m_nHorzMaxSize);
this-&SetScrollRange(
SB_VERT,0,m_nVertMaxSize);
this-&GetScrollInfo(SB_HORZ,lpsi);
lpsi-&nPage = m_nHorzPageS
this-&SetScrollInfo(SB_HORZ,lpsi);
this-&GetScrollInfo(SB_VERT,lpsi);
lpsi-&nPage = m_nVertPageS
this-&SetScrollInfo(SB_VERT,lpsi);
void CButtonPic::DarwPic()
&&& CDC* pDC =
this-&GetDC();
this-&GetClientRect(&rc);
&&& BITMAP
cb-&GetBitmap(&bm);
dcImage.CreateCompatibleDC(pDC);
dcImage.SelectObject(cb);
&&& //画图
//pDC-&BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY);
pDC-&StretchBlt(0,0,rc.Width(),rc.Height(),
&dcImage,m_nHorzPos
,m_nVertPos,rc.Width(),rc.Height(),SRCCOPY);
这样就能实现在MFC中显示较大的IplImage的图片了。
我已将代码放在CSDN上,同学们可以通过下面网址进行下载
http://download.csdn.net/detail/kaizibaby
最后的效果图为:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。MFC中让滚动条响应上下按键的消息
一.为视类窗口添加滚动条功能
实现步骤:
1.首先要确定Document的大小,比如400&450.可以将其大小存储在Document类中,也可以直接去设置
2.在视类窗口的文件中把基类CView改为CScrollView,以及消息映射中的CView都改掉。如果你怕出错可以将C&&View.cpp和C&&View.h中的CView都用查找替换为CScrollView。
3.这是最重要的一步,一定要给改过之后的C&&View类中加入OnInitialUpdate()函数,而且得在函数中用SetScrollSizes函数去设定默认文档的大小,如SetScrollSizes(MM_TEXT,&GetDocument()-&GetDocSize());否则将会出现如下在Viewscrl.cpp中的134行错误
& TRACE0(&"Error:&must&call&SetScrollSizes()&or&SetScaleToFitSize()&");&
TRACE0(&"/tbefore&painting&scroll&view./n&");
二.在视类窗口文件中添加键盘上下键响应函数
afx_msg void
OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
CLdcompileView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT
在此添加消息处理程序代码和/或调用默认值
(nChar ==VK_DOWN) { ChooseDown(); }
&else if (nChar ==VK_UP) { ChooseUp(); }
三.在上下按键响应函数中设置滚动条位置
CLdcompileView::ChooseDown()//下按键响应函数
预值//按键位置小于滚动条位置时
四.其它设置滚动条的方法
OnVscroll函数第一个参数用于指定一个指示用户的滚动请求的滚动条代码。SB_TOP是指示滚动条到顶部,第二个参数只有当第一个参数被设置为SB_THUMBPOSITION或SB_THUMBTRACK时这个参数被用来指定滚动框的位置,否者不使用此参数,我们设置为0,第三个参数设置为NULL,默认为当前窗口滚动条。
void CtestView::OnKeyDown(UINT nChar, UINT
nRepCnt, UINT nFlags)
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch (nChar)
case VK_HOME:
OnVScroll(SB_TOP,0,NULL);
OnHScroll(SB_LEFT,0,NULL);
case VK_END:
OnVScroll(SB_BOTTOM,0,NULL);
OnHScroll(SB_RIGHT,0,NULL);
CScrollView::OnKeyDown(nChar, nRepCnt,
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。2640人阅读
vs10 滚动 CScrollView

修改继承基类
1.首先要确定Document的大小,比如400×450.可以将其大小存储在Document类中,也可以直接去设置
2.在代码中把public:C××View:CView中的CView改为CScrollView,以及消息映射中的CView都改掉。如果你怕出错可以将C××View.cpp和C××View.h中的CView都用查找替换为CScrollView。
3.这是最重要的一步,一定要给改过之后的C××View类中加入OnInitialUpdate()函数,而且得在函数中用SetScrollSizes函数去设定默认文档的大小,如SetScrollSizes(MM_TEXT, GetDocument()-&GetDocSize());否则将会出现如下在Viewscrl.cpp中的134行的错误 TRACE0( &Error: must call SetScrollSizes() or SetScaleToFitSize()
&); TRACE0( &/tbefore painting scroll view./n &);
4.至此就完成了更改基类CView到CScrollView的步骤
原文地址:
最简单的方法是新建项目,在最后生成的类那里把CXXview的基类修改为CScrollView。
这时编译运行不会看到滚动条,为什么呢?我们不是继承了CScrollView类么?
别急,看不到滚动条是因为我们滚动视图的总大小设置太小了,而产生的视图太大,不用滚动条就能看完,要想看到滚动条你可以改变产生的视图大小,用鼠标在视图边框拖动改变大小,当足够小的时候你会发现滚动条出现了!
打开view类中的OnitialUpdata函数,vs2010里默认的视图大小是100,100像素。
SetScrollSizes用来调整滚动特性,具体可以百度百科。
修改OnitialUpdata函数,这里用到CSize。
类CSize是对Windows结构SIZE的封装,凡是能用SIZE结构的地方都可以用CSize代替。结构SIZE表示一个矩形的长度和宽度。
我们删掉函数里原有的其他语句,只留下CScrollView::OnInitialUpdate();
void&CtestView::OnInitialUpdate()&&{&&&&&&CScrollView::OnInitialUpdate();&&&&&&&&CSize&sizeTotal();&&&&&&SetScrollSizes(MM_TEXT,&sizeTotal);&&}&&
void CtestView::OnInitialUpdate()
CScrollView::OnInitialUpdate();
CSize sizeTotal();
SetScrollSizes(MM_TEXT, sizeTotal);
编译运行一下,滚动条在默认窗口大小下就会出现了。
这是因为SetScrollSizes方法,修改了滚动视图的总大小。也就是他的第二个参数。第一个参数是映射方法,我们默认使用MM_TEXT,关于映射大家可以自行百度,这里不多做解释。
SetScrollSizes的第三个参数是控制鼠标单击滚动条轴中的每个方向滚动的水平和垂直距离。第四个参数指定每个响应鼠标单击滚动箭头的方向滚动的水平和垂直距离。
void&CtestView::OnInitialUpdate()&&{&&&&&&CScrollView::OnInitialUpdate();&&&&&&&&CSize&sizeTotal();&&&&&&CSize&sizePage(1,1);&&&&&&CSize&sizeLine(100,100);&&&&&&SetScrollSizes(MM_TEXT,&sizeTotal,sizePage,sizeLine);&&}&&
void CtestView::OnInitialUpdate()
CScrollView::OnInitialUpdate();
CSize sizeTotal();
CSize sizePage(1,1);
CSize sizeLine(100,100);
SetScrollSizes(MM_TEXT, sizeTotal,sizePage,sizeLine);
现在还是只能用鼠标来移动滚动条,我们想让键盘也能控制,就得添加消息响应,当按下任意按键时就会响应WM_KEYDOWN消息,通过类向导为view类添加此消息响应。
void&CtestView::OnKeyDown(UINT&nChar,&UINT&nRepCnt,&UINT&nFlags)&&{&&&&&&&&&&&&switch&(nChar)&&&&&&{&&&&&&case&VK_HOME:&&&&&&&&&&OnVScroll(SB_TOP,0,NULL);&&&&&&&&&&OnHScroll(SB_LEFT,0,NULL);&&&&&&&&&&break;&&&&&&case&VK_END:&&&&&&&&&&OnVScroll(SB_BOTTOM,0,NULL);&&&&&&&&&&OnHScroll(SB_RIGHT,0,NULL);&&&&&&&&&&break;&&&&&&}&&&&&&CScrollView::OnKeyDown(nChar,&nRepCnt,&nFlags);&&}&&
void CtestView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch (nChar)
case VK_HOME:
OnVScroll(SB_TOP,0,NULL);
OnHScroll(SB_LEFT,0,NULL);
case VK_END:
OnVScroll(SB_BOTTOM,0,NULL);
OnHScroll(SB_RIGHT,0,NULL);
CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
添加如上代码,编译运行,这是按键盘上的Home键就会执行VK_HOME中的代码,OnVscroll函数第一个参数用于指定一个指示用户的滚动请求的滚动条代码。SB_TOP是指示滚动条到顶部,第二个参数只有当第一个参数被设置为SB_THUMBPOSITION或SB_THUMBTRACK时这个参数被用来指定滚动框的位置,否者不使用此参数,我们设置为0,第三个参数设置为NULL,默认为当前窗口滚动条。
关于OnVscroll函数参见:
OnHscroll跟OnVScroll类似,一个管理横向一个管理纵向。
接下来我们来画一个图形试试滚动条吧。
按vc学习(一)中方法添加两个变量m_rectEllipse,m_nColor并初始化。
void&CtestView::OnDraw(CDC*&pDC)&&{&&&&&&pDC-&SelectStockObject(m_nColor);&&&&&&pDC-&Ellipse(m_rectEllipse);&&}&&
void CtestView::OnDraw(CDC* pDC)
pDC-&SelectStockObject(m_nColor);
pDC-&Ellipse(m_rectEllipse);
编译运行,Ok能用鼠标和键盘控制滚动条看到圆的不同地方了。
添加鼠标点击变色,按VC一中方法响应WM_LBUTTONDOWN消息。
void&CtestView::OnLButtonDown(UINT&nFlags,&CPoint&point)&&{&&&&&&&&&&&&CClientDC&dc(this);&&&&&&CRect&rectDevice&=&m_rectE&&&&&&if&(rectDevice.PtInRect(point))&{&&&&&&&&&&if&(m_nColor==GRAY_BRUSH)&{&&&&&&&&&&&&&&m_nColor=BLACK_BRUSH;&&&&&&&&&&}&else&{&&&&&&&&&&&&&&m_nColor=GRAY_BRUSH;&&&&&&&&&&}&&&&&&&&&&InvalidateRect(rectDevice);&&&&&&}&&&&&&CScrollView::OnLButtonDown(nFlags,&point);&&}&&
void CtestView::OnLButtonDown(UINT nFlags, CPoint point)
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
CRect rectDevice = m_rectE
if (rectDevice.PtInRect(point)) {
if (m_nColor==GRAY_BRUSH) {
m_nColor=BLACK_BRUSH;
m_nColor=GRAY_BRUSH;
InvalidateRect(rectDevice);
CScrollView::OnLButtonDown(nFlags, point);
类CClientDC派生于CDC,在构造时调用了Windows函数GetDC,在析构时调用了ReleaseDC。这意味着和CClientDC对象相关的设备上下文是窗口的客户区。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:43376次
排名:千里之外
转载:49篇
(7)(3)(1)(1)(4)(1)(38)

我要回帖

更多关于 audition 去除人声 的文章

 

随机推荐