互动直播UI设置 之 主播UI

news2024/11/16 10:54:09

目录

一、普通模式下,布局选项

1、布局按钮

1)、点击布局按钮

2)、选择哪种布局后,主进程通过WM_COPYDATA 发送信息

2、duilib样式布局文件

1)、主画面

2)、连麦者画面

3、主画面自动调整宽度

1)、再看下主画面布局

2) 、 动态调整布局Padding,实现画面左移效果


一、普通模式下,布局选项

1、布局按钮

1)、点击布局按钮

		else if (name == L"btn_showLayout_double") //布局选项
		{
			if (BDoubleVideo())
			{
				ShowPhotoFrameDlg_changeLayout(); //切换布局
			}
			else{
				GetFontPage()->ShowLayouStyleWindow();
			}
			if (g_bTestModel) //本地测试
			{
				ui::HBox *pBox = (ui::HBox*)FindControl(L"layoutHBox");
				if (pBox)
				{
					if (pBox->IsVisible())
						pBox->SetVisible(false);
					else
						pBox->SetVisible(true);
				}
			}
		}

	void BypassLiveFontPage::ShowLayouStyleWindow() //显示布局选择窗口 
	{
		SendCopyDataMsg(m_hParentWnd, "", Show_ChooseLayoutWindow); //显示我的课主进程窗口
	}

我这里是,向主进程发送消息,让主进程显示这个连麦方式窗口

2)、选择哪种布局后,主进程通过WM_COPYDATA 发送信息

主进程发送WM_COPYDATA消息后,

互动进程接受处理主进程发来的消息

	//主进程发来的信息
	void BypassLiveFontPage::HandleSubProcessMsg(UINT uMsg, WPARAM wParam, LPARAM lParam){
		if (uMsg != WM_COPYDATA)
			return;

			case SubExe_PCLayout:
			{ //选择布局
				std::string str = sCopyData;
				LayoutType nPcLayout = (LayoutType)std::stoi(str);
				if (pCurChatForm)
				{
					if (pCurChatForm->m_nPcLayout != nPcLayout)
					{
						pCurChatForm->m_nPcLayout = nPcLayout;
						pCurChatForm->m_BypassCtrlClass.SetLocalPcLayoutHideOrShow(nPcLayout);

						//如果正在直播着,则动态切换
						if (pCurChatForm->BLiving())
							pCurChatForm->UpdateLiveStream();
					}


					pCurChatForm->ResetSelfLayout();
				}
				break;
			}

2、duilib样式布局文件

这个互动窗口的布局如下:

                        <Box name="VideoBox" margin="0,0,0,16" bkcolor="bk_video_content" visible="true">
                            <Box padding="0,0,0,0" name="padBoxCtrl">
                                <!--    <Box padding="20,20,100,20"> -->
                                <BitmapControl name="video_screen" bkcolor="bk_video_content" visible="true">
                                    <Box bkcolor="xnw_trans" valign="bottom" name="userBox" visible="false">
                                        <Box bkcolor="black_trans_20" halign="center" width="auto" height="auto" valign="bottom" padding="5,2,5,2" margin="0,0,0,20" borderround="10,10">
                                            <Label name="user" width="auto" height="auto" text="" normaltextcolor="white" visible="false" />
                                        </Box>
                                    </Box>
                                    <Box name="volumeBox" width="30" height="30" bkimage="xnwRes/db/dbBk.png" valign="bottom" margin="30,0,0,55" visible="true">
                                        <Button name="volume" width="auto" height="auto" valign="center" halign="center" visible="true" />
                                    </Box>
                                </BitmapControl>
                            </Box>
                            <BitmapControl name="bypass_screen1" margin="0,0,50,50" bkcolor="bk_video_content" visible="false" maxwidth="120" maxheight="120" minwidth="90" minheight="90" valign="bottom" halign="right" mousechild="true">
                                <Box bkcolor="xnw_trans" bordersize="1" bordercolor="white_trans_80" valign="bottom" name="userBox" visible="false" mouse="false">
                                    <Box bkcolor="black_trans_20" halign="center" width="auto" height="auto" valign="bottom" padding="5,2,5,2" margin="0,0,0,10" borderround="10,10" mouse="false">
                                        <Label name="user" width="auto" height="auto" text="" normaltextcolor="white" visible="false" mouse="false" />
                                    </Box>
                                </Box>
                                <Box name="volumeBox" width="30" height="30" bkimage="xnwRes/db/dbBk.png" align="top" halign="right" margin="0,20,20,0">
                                    <Button name="volume" width="auto" height="auto" valign="center" halign="center" visible="true" />
                                </Box>
                                <Event type="mouseenter" receiver=".\user" applyattribute="visible=&quot;true&quot;" />
                                <Event type="mouseleave" receiver=".\user" applyattribute="visible=&quot;false&quot;" />
                            </BitmapControl>
                            <BitmapControl name="bypass_screen2" margin="0,0,50,50" bkcolor="bk_video_content" visible="false" maxwidth="120" maxheight="120" minwidth="90" minheight="90" valign="bottom" halign="right" mousechild="true">
                                <Box bkcolor="xnw_trans" bordersize="1" bordercolor="white_trans_80" valign="bottom" name="userBox" visible="false" mouse="false">
                                    <Box bkcolor="black_trans_20" halign="center" width="auto" height="auto" valign="bottom" padding="5,2,5,2" margin="0,0,0,10" borderround="10,10">
                                        <Label name="user" width="auto" height="auto" text="" normaltextcolor="white" visible="false" />
                                    </Box>
                                </Box>
                                <Box name="volumeBox" width="30" height="30" bkimage="xnwRes/db/dbBk.png" align="top" halign="right" margin="0,20,20,0">
                                    <Button name="volume" width="auto" height="auto" valign="center" halign="center" visible="true" />
                                </Box>
                                <Event type="mouseenter" receiver=".\user" applyattribute="visible=&quot;true&quot;" />
                                <Event type="mouseleave" receiver=".\user" applyattribute="visible=&quot;false&quot;" />
                            </BitmapControl>
                            <BitmapControl name="bypass_screen3" margin="0,0,50,50" bkcolor="bk_video_content" visible="false" maxwidth="120" maxheight="120" minwidth="90" minheight="90" valign="bottom" halign="right" mousechild="true">
                                <Box bkcolor="xnw_trans" bordersize="1" bordercolor="white_trans_80" valign="bottom" name="userBox" visible="false" mouse="false">
                                    <Box bkcolor="black_trans_20" halign="center" width="auto" height="auto" valign="bottom" padding="5,2,5,2" margin="0,0,0,10" borderround="10,10">
                                        <Label name="user" width="auto" height="auto" text="" normaltextcolor="white" visible="false" />
                                    </Box>
                                </Box>
                                <Box name="volumeBox" width="30" height="30" bkimage="xnwRes/db/dbBk.png" align="top" halign="right" margin="0,20,20,0">
                                    <Button name="volume" width="auto" height="auto" valign="center" halign="center" visible="true" />
                                </Box>
                                <Event type="mouseenter" receiver=".\user" applyattribute="visible=&quot;true&quot;" />
                                <Event type="mouseleave" receiver=".\user" applyattribute="visible=&quot;false&quot;" />
                            </BitmapControl>
                            <BitmapControl name="bypass_screen4" margin="0,0,50,50" bkcolor="bk_video_content" visible="false" maxwidth="120" maxheight="120" minwidth="90" minheight="90" valign="bottom" halign="right" mousechild="true">
                                <Box bkcolor="xnw_trans" bordersize="1" bordercolor="white_trans_80" valign="bottom" name="userBox" visible="false" mouse="false">
                                    <Box bkcolor="black_trans_20" halign="center" width="auto" height="auto" valign="bottom" padding="5,2,5,2" margin="0,0,0,10" borderround="10,10">
                                        <Label name="user" width="auto" height="auto" text="" normaltextcolor="white" visible="false" />
                                    </Box>
                                </Box>
                                <Box name="volumeBox" width="30" height="30" bkimage="xnwRes/db/dbBk.png" align="top" halign="right" margin="0,20,20,0">
                                    <Button name="volume" width="auto" height="auto" valign="center" halign="center" visible="true" />
                                </Box>
                                <Event type="mouseenter" receiver=".\user" applyattribute="visible=&quot;true&quot;" />
                                <Event type="mouseleave" receiver=".\user" applyattribute="visible=&quot;false&quot;" />
                            </BitmapControl>
                            <Label name="live_prompt" font="18" normaltextcolor="white" halign="center" valign="center" text="直播尚未开启..." visible="false" />
                            <Control name="loading_prompt" width="128" bkimage="loading.gif" height="15" halign="center" valign="center" visible="false" />
                            <!-- 倒计时弹窗,距本课结束不足10分钟,则跳出本弹窗 -->
                            <Box name="timeMsgBox" height="200" width="350" valign="center" halign="center" bkcolor="bk_mainwnd_title_and_bottom" alpha="255" borderround="10,10" visible="true">
                                <Button class="btn_wnd_close" name="timeMsgCloseBtn1" margin="2,10,10,0" halign="right" />
                                <Label margin="0,30,0,0" font="1" halign="center" width="auto" normaltextcolor="lightcolor1" text="离直播结束还有10分钟" />
                                <Label margin="0,80,0,0" halign="center" font="1" width="auto" normaltextcolor="lightcolor1" text="到时候直播未结束,系统将自动延时60分钟,请做好准备。" />
                                <Button class="btn_global_green_80x30" name="timeMsgCloseBtn2" text="我知道了" margin="0,0,0,30" valign="bottom" halign="center">
                                </Button>
                            </Box>
                            <!-- 全屏按钮 -->
                            <Box name="scale_menu_box" margin="0,10,20,0" width="26" height="26" halign="right" visible="false">
                                <Button name="max_scale_btn" normalimage="xnwRes/icon_fullscreen_n.png" hotimage="xnwRes/icon_fullscreen_h.png" pushedimage="xnwRes/icon_fullscreen_p.png" valign="center" tooltiptext="全屏" visible="true" />
                                <Button name="restore_scale_btn" visible="false" normalimage="xnwRes/icon_halfscreen_n.png" hotimage="xnwRes/icon_halfscreen_h.png" pushedimage="xnwRes/icon_halfscreen_p.png" valign="center" tooltiptext="退出全屏" />
                            </Box>

                            <!-- 展开按钮 -->
                            <Box name="expansion_box" margin="0,10,20,0" width="auto" height="auto" halign="right" visible="true">
                                <Button name="expansion_btn" normalimage="xnwRes/expansion_n.png" hotimage="xnwRes/expansion_h.png" valign="center" tooltiptext="展开" visible="true" />
           
                            </Box>

                            <Box name="pauseInfo" height="170" width="280" valign="center" halign="center" bkcolor="white" borderround="10,10" visible="false">
                                <Button class="btn_wnd_close" name="pauseInfoCloseBtn" margin="2,10,10,0" halign="right" />
                                <VBox margin="0,50,0,10" childmargin="20">
                                    <Control bkimage="xnwRes/rest.png" width="auto" height="auto" halign="center" />
                                    <Label name="pauseText" font="3" width="auto" normaltextcolor="xnw_text_black" halign="center" valign="center" text="直播暂停中,休息一会" />
                                </VBox>
                            </Box>
                            <!-- 麦克风 -->
                            <Box name="mic_box" width="auto" height="200" width="300" margin="45,0,0,10" valign="bottom" bkcolor="bk_mainwnd_title_and_bottom" visible="false" borderround="10,10" alpha="255">
                                <Combo class="combol_model3" name="microphonelist_source" height="30" width="205" margin="0,40,0,10" bkcolor="lightcolor2" halign="center" bordersize="1" bordercolor="bk_border_url_edit">
                                </Combo>
                                <HBox margin="30,150,30,0" valign="bottom" childmargin="30">
                                    <Button class="btn_global_green_80x30" name="mic_yesBtn" text="确定" />
                                    <Button class="btn_global_green_80x30" name="mic_noBtn" text="取消" />
                                </HBox>
                            </Box>
                            <Label name="live_tip" font="1" normaltextcolor="xnw_red" valign="bottom" margin="30,0,0,0" text="直播中的参数信息:" visible="false" />
                            <!-- 布局 -->
                            <HBox margin="200,0,0,0" name="layoutHBox" width="auto" height="auto" valign="bottom" halign="left" visible="FALSE">
                                <VBox name="layoutVBox" height="auto" width="115" bkcolor="xnw_combo_bk" borderround="5,5" bordercolor="xnw_combo_bk" halign="center" margin="0,0,30,0" padding="5,10,5,10" childmargin="6">
                                    <Button class="button_item_white" height="20" text="标准连麦" font="1" halign="center" name="layout_Big" />
                                    <Button class="button_item_yellow" height="20" text="迷你连麦" font="1" halign="center" name="layout_Mini" />
                                    <Button class="button_item_white" height="20" text="隐身连麦" font="1" halign="center" name="layout_Hide" />
                                </VBox>
                            </HBox>


                            <Box name="bottomParentPane" bkcolor="xnw_brown" height="50" padding="30,0,0,0" valign="bottom" visible="false">
                                <HBox name="BottomPane" width="stretch" height="50">
                                    <Box name="PPT_Box" width="16" height="16" margin="0,0,0,0" valign="center" visible="false">
                                        <Button class="btn_white_max" name="swtichMax_cef" valign="center" tooltiptext="当前学生窗口:讲义大窗口,视频小窗口" />
                                        <Button class="btn_white_restore" name="switchSmall_cef" visible="false" tooltiptext="当前学生窗口:讲义小窗口,视频大窗口" />
                                    </Box>
                                    <Button class="mic_Open" name="btn_Mic" margin="15,0,0,0" valign="center" />
                                    <Button class="btn_smallUp" name="btn_seletctMic" margin="7,0,0,0" />
                                    <!-- 摄像头 -->
                                    <Button class="camera_Open" name="disable_enable_camera" margin="15,0,0,0" valign="center" />
                                    <Button class="btn_smallUp" name="camera_btn" margin="7,0,0,0" />
                                    <Button class="beauty_Open" name="beauty_camera" margin="15,1,0,0" valign="center" />
                                    <Button class="layout_Hide" name="btn_layout_double" text="隐藏" margin="15,0,0,0" valign="center" visible="false" />
                                    <!--布局-->
                                    <Button name="btn_showLayout_double" normalimage="layout_n.png" hotimage="layout_h.png" margin="15,0,0,0" width="auto" height="auto" valign="center" />
                                    <!-- 充满    看全 -->
                                    <Button class="screen_complete" name="btn_cut_or_scale" margin="15,0,0,0" valign="center" />
                                    <Button class="share_desktop" name="moreInfo" text="更多信息-仅测试用" valign="center" visible="false" />
                                    <Button class="btn_global_white_80x30" name="showVideo" text="视频设置" valign="center" margin="10,0,10,0" visible="false" />
                                    <Button class="btn_global_white_80x30" name="layoutBtn" text="布局" valign="center" margin="10,0,10,0" visible="false" />
                                    <Button name="start_ls" bkcolor="link_blue" font="1" normaltextcolor="white" width="90" height="stretch" text="开始直播" visible="false" />
                                    <Button name="stop_ls" bkcolor="btn_red" font="1" normaltextcolor="white" width="90" height="stretch" text="结束直播" margin="20,0,10,0" visible="false" />
                                    <!-- 保留 未用 -->
                                    <!-- <Control /> -->
                                    <!-- 主播端隐藏 -->
                                    <Button class="share_desktop" name="IntBtn" text="申请互动" valign="center" visible="false" />
                                    <!--  <Control /> -->
                                    <!--未用  -->
                                    <Label name="ls_time" font="1" normaltextcolor="message_tip" valign="center" margin="18,0,0,0" text="00:00:00" visible="false" />
                                    <Button class="btn_global_white_80x30" name="main_control" visible="true" text="控制" valign="center" margin="10,0,0,0" visible="false" />
                                    <Button class="btn_global_white_80x30" name="audio_hook" visible="true" text="背景乐" valign="center" margin="10,0,0,0" visible="false" />
                                    <Button class="btn_global_white_80x30" name="camera_set" visible="true" text="摄像头设置" valign="center" margin="10,0,0,0" visible="false" />
                                    <Button class="btn_global_white_80x30" name="mic_set" text="麦克风设置" valign="center" margin="10,0,10,0" visible="false" />
                                    <Button class="btn_global_white_80x30" name="model_set" text="摄像头直播" valign="center" margin="10,0,10,0" visible="false" />
                                    <Button class="btn_global_white_80x30" name="interact_set" text="互动" valign="center" margin="10,0,10,0" visible="false" />
                                    <!-- 未用 -->
                                    <!--学生隐藏 主播显示 -->
                                    <!--                                 <Box name="endBox" halign="right" bkcolor="white_trans_12" width="122" margin="20,0,0,0">
                                                <Button class="end_liveBtn_Text" margin="16,0,0,0" text="结束直播" valign="center" halign="left" name="end_Class" visible="true" />
                                            </Box> -->
                                    <Button class="btn_white_set" valign="center" margin="0,0,20,0" name="setBtn" visible="false" />
                                    <Button class="btn_white_min" name="minbtn" margin="0,8,20,0" valign="center" visible="false" />
                                    <Box name="sys_menu_box" width="16" height="16" margin="0,0,20,0" valign="center" visible="false">
                                        <Button class="btn_white_max" name="maxbtn" valign="center" />
                                        <Button class="btn_white_restore" name="restorebtn" visible="false" />
                                    </Box>
                                    <!--  <Control normalcolor="splitline_level1" height="stretch" width="1" /> -->
                                </HBox>
                            </Box>
                        </Box>

1)、主画面

                          <Box padding="0,0,0,0" name="padBoxCtrl">
                                <!--    <Box padding="20,20,100,20"> -->
                                <BitmapControl name="video_screen" bkcolor="bk_video_content" visible="true">
                                    <Box bkcolor="xnw_trans" valign="bottom" name="userBox" visible="false">
                                        <Box bkcolor="black_trans_20" halign="center" width="auto" height="auto" valign="bottom" padding="5,2,5,2" margin="0,0,0,20" borderround="10,10">
                                            <Label name="user" width="auto" height="auto" text="" normaltextcolor="white" visible="false" />
                                        </Box>
                                    </Box>
                                    <Box name="volumeBox" width="30" height="30" bkimage="xnwRes/db/dbBk.png" valign="bottom" margin="30,0,0,55" visible="true">
                                        <Button name="volume" width="auto" height="auto" valign="center" halign="center" visible="true" />
                                    </Box>
                                </BitmapControl>
                            </Box>

2)、连麦者画面

3、主画面自动调整宽度

无连麦者,占满窗口,有连麦者,右移窗口

无连麦情况

有连麦情况

1)、再看下主画面布局

	padBoxCtrl = (ui::Box*)FindControl(L"padBoxCtrl");

可以通过设置    padBoxCtrl 的padding来动态调整主画面宽度

2) 、 动态调整布局Padding,实现画面左移效果

padBoxCtrl->GetLayout()->SetPadding(ui::UiRect(0, 0, height / 3-1, 0));

	void ChatroomForm::PaintVideo()
	{
		if (g_bCameRatioChanged)
			return;
		ShowIntTime_Stu();

		if (!IsWindowVisible(GetHWND()))
			return;

		if (master_)
		{          
			int width = video_show_ctrl_->GetWidth();
			int height = video_show_ctrl_->GetHeight();		
			ReSetBypassCtlMasterWH();		
			m_BypassCtrlClass.AutoAdjustPos();
			BOOL bCut = true;
			SetCutScaleBtnAutoVisible();
			if (m_nPcLayout == Layout_Ver || m_nPcLayout == Layout_MINI || m_nPcLayout == Layout_HIDE) //自动放缩布局
			{
				QLOG_APP(std::to_wstring(m_studentInRoomSet.size()));
				if (m_studentInRoomSet.size() == 0)
				{
					if (padBoxCtrl)
					{
						padBoxCtrl->GetLayout()->SetPadding(ui::UiRect(0, 0, 0, 0));
						//bCut = true;

						if (layoutMsg_.bCurWhole_) //当前缩放布局
							bCut = false;
						else
							bCut = true;       //当前裁剪布局	
					}
				}
				else{
					if (padBoxCtrl)
					{
						padBoxCtrl->GetLayout()->SetPadding(ui::UiRect(0, 0, height / 3-1, 0));

						if (layoutMsg_.bCurWhole_) //当前缩放布局
							bCut = false;
						else
							bCut = true;       //当前裁剪布局						
					}
				}
			}
			else{
				if (padBoxCtrl)
				{
					padBoxCtrl->GetLayout()->SetPadding(ui::UiRect(0, 0, 0, 0));
				}
			}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1139412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UnrealSynth - 基于虚幻引擎的YOLO合成数据生成器

UnrealSynth虚幻合成数据生成器利用虚幻引擎的实时渲染能力搭建逼真的三维场景&#xff0c;为YOLO等AI模型的训练提供自动生成的图像和标注数据&#xff0c;官方下载地址&#xff1a;UnrealSynth虚幻合成数据生成器。 UnrealSynth生成的合成数据可用于深度学习模型的训练和验证…

18.3 NPCAP 构建中间人攻击

ARP欺骗&#xff08;ARP Spoofing&#xff09;是一种网络攻击手段&#xff0c;其目的是通过欺骗目标主机来实现网络攻击。ARP协议是一种用于获取MAC地址的协议&#xff0c;因此欺骗者可以使用ARP欺骗来迫使其目标主机将网络流量发送到攻击者控制的设备上&#xff0c;从而实现网…

error LNK2019: 无法解析的外部符号

文章目录 1 问题2 出现该问题的原因和解决方法2.1 原因&#xff1a;2.3 解决方法&#xff1a;需要查看一下项目的属性配置是否正确&#xff1a; 3 其他可能得原因&#xff0c;但是本项目中没有出现 1 问题 在测试base64代码的时候&#xff0c;VS2022提示我错误如下&#xff1a…

Julia数值计算初步

文章目录 复数系统运算符三角函数指数、对数、取整 Julia系列&#xff1a;编程初步&#x1f525;数组 Julia作为主打数值计算的编程语言&#xff0c;对一些常用的计算函数提供了非常细致的支持&#xff0c;十分人性化&#xff0c;体验之后爱不释手。 复数系统 在Juli中&…

笔记本怎么录屏?这3个方法请你收好

在现代教育、工作和演示中&#xff0c;屏幕录制成为了无可替代的工具。它使我们能够捕捉电脑屏幕上的一切&#xff0c;从PPT演示到教程制作&#xff0c;再到技术支持。因此&#xff0c;选择合适的录屏工具显得尤为重要。本文将详细介绍笔记本怎么录屏的3个方法&#xff0c;这些…

软件绘制 硬件加速绘制 【DisplayList RenderNode】

Android4.0以后&#xff0c;系统默认开启硬件加速来渲染视图 异同点 共同点 两者都是从SF获取一块内存&#xff0c;绘制都是在APP端&#xff0c;绘制好后都是通知SF去进行合成图层 真正的区别 真正的区别&#xff1a;绘制是通过CPU还是GPU完成的视图绘制。 对应区别在代码中的体…

SpringBoot整合Gateway 的Demo(附源码)

源码&#xff0c;可直接下载 Gateway模块 Gateway 的父pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

学习嵌入式可以胜任哪一些行业?

今日话题&#xff0c;学习嵌入式可以胜任哪一些行业&#xff1f;学习嵌入式开发可以胜任许多行业&#xff0c;因为嵌入式技术在各个领域都有广泛的应用。嵌入式系统用于医疗设备、患者监测系统、药物分发设备等。智能手机、智能家居设备、游戏机等消费电子产品都包含嵌入式系统…

RocketMQ mmap原理和使用

传统文件IO 普通的IO操作的一个弊端&#xff0c;必然涉及到两次数据拷贝操作&#xff0c;对磁盘读写性能是有影响的。 那么如果我们要将一些数据写入到磁盘文件里去呢&#xff1f; 那这个就是一样的过程了&#xff0c;必须先把数据写入到用户进程空间里去&#xff0c;然后从这里…

网络时代下的声音之路:如何在中央新闻媒体发布网评稿

在当今数字时代&#xff0c;信息传播已经变得更加便捷和广泛。各大中央新闻媒体平台为民众提供了一个发布观点、表达意见的平台。在这个背景下&#xff0c;撰写并发布网评稿成为了一种重要的社会参与方式。根据媒介易软文发稿平台的总结&#xff0c;下面是探讨如何在各大中央新…

基于单片机的IC卡门禁系统设计

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、主要研究内容及总体设计方案1.1 系统方案设计1.2系统工作原理 二、硬件设计2.1 主控电路 三、软件设计3.2主程序设计实物附录1 原理图附录2 源程序清单 四、 结论五、 文章目录 概要 本论文重点通过对射频技术…

电脑上怎么录制视频教程带画笔工具?

无论你是创建教程、还是演示文稿&#xff0c;可能都希望使用带有画笔工具的录屏软件来帮助你创建吸引观众注意力的重要内容。幸运的是&#xff0c;有一些很棒的录屏软件可供你选择&#xff0c;本文就为你推荐一款带有画笔工具的最佳录屏软件&#xff0c;继续阅读查看吧&#xf…

明基、书客、小米的护眼台灯谁的更值得入手?三款台灯真实测评!

目前中国青少年近视占比是越来越高了&#xff0c;尤其是初中生更是重灾区。而现在看来小学阶段近视风险也有上升的趋势。所以&#xff0c;孩子在正式步入小学时&#xff0c;学习桌上不可或缺的就要放上一台好的且不错的护眼台灯。不过如今市面上的护眼台灯种类多到让人眼花缭乱…

Maven第三章:IDEA集成与常见问题

Maven第三章:IDEA集成与常见问题 前言 本章内容重点:了解如何将Maven集成到IDE(如IntelliJ IDEA或Eclipse)中,以及使用过程中遇到的常见的问题、如何解决,如何避免等,可以大大提高开发效率。 IEAD导入Maven项目 File ->Open 选择上一章创建的Maven项目 my-app查看po…

echarts多y轴优化方案

优化方向&#xff1a;点击图例&#xff0c;对y轴进行屏蔽&#xff0c;自动计算y轴位置 效果如下&#xff1a; 对应实现思路&#xff1a;通过监听图例点击事件&#xff0c;渲染y轴显示隐藏和y轴对应位置。 <script setup lang"ts"> import { onMounted, ref,…

简述JVM

文章目录 JVM简介JVM运行时数据区堆(线程共享)方法区/元空间/元数据区(线程共享)栈程序计数器 JVM类加载类加载过程双亲委派模型 垃圾回收机制(GC)判断对象是否为垃圾判断是否被引用指向 如何清理垃圾, 释放对象? JVM简介 JVM 是 Java Virtual Machine 的简称, 意为Java虚拟机…

代码随想录打卡第五十二天|123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 题目&#xff1a; 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉之…

iPhone无法连接电脑?怎么回事?解决方法来了!

苹果用户将手机和电脑连接后&#xff0c;可以轻松实现两者之间的数据传输。但是&#xff0c;在连接设备的过程中可能会出现没有任何反应的情况。这是怎么回事&#xff1f;本文将为大家介绍解决iPhone无法连接电脑的常见方法。如果您的iphone无法连接电脑&#xff0c;请尝试以下…

导入Embassy库进行爬虫

Embassy是一个基于Lua的轻量级爬虫框架&#xff0c;可以方便地进行网页抓取和数据提取。它提供了简单易用的接口和丰富的功能&#xff0c;可以帮助开发者快速构建爬虫应用。 要使用Embassy进行爬虫&#xff0c;首先需要安装Embassy库。可以通过Lua的包管理工具luarocks来安装E…

如何用MFI确定波浪理论第一浪,anzo capital实操演示

通过上文投资者学会了如何确定波浪理论第一浪&#xff0c;但在后台有投资者咨询 &#xff1a;如何用MFI确定波浪理论第一浪&#xff0c;anzo capital昂首资本秉承着有求必应的态度&#xff0c;今天实操进行演示。 在图中&#xff0c;发散用蓝色标注&#xff0c;收敛用绿色。价…