如何把一个button控件,设为disable,要用代码,不通过属性设定

sunyuzhe114 2001-10-28 08:21:44
...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovering 2001-10-28
  • 打赏
  • 举报
回复
GetDlgItem(IDC_BUTTON1)->EnableWindow(false);
AttaBoy 2001-10-28
  • 打赏
  • 举报
回复
ID_BUTTON是你控件的ID

要么你用ClassWizard创建一 个Control变量,eg: m_button
m_button.EnableWindow(FALSE);
也行
AttaBoy 2001-10-28
  • 打赏
  • 举报
回复
哈哈,送分。用EnableWindnow

GetDlgItem(ID_BUTTON)->EnableWindow(FALSE);
其中ID_BUTTON是你按钮控件的名字

Properties Following the first object, the class also accepts an optional second object that may contain any of the following properties to help customize Calendar to your website: * blocked - An array of blocked (disabled) dates in the following format: 'day month year'. The syntax is similar to cron: the values are separated by spaces and may contain * (asterisk) - (dash) and , (comma) delimiters. For example blocked: ['1 1 2007'] would disable January 1, 2007; blocked: ['* 1 2007'] would disable all days (wildcard) in January, 2007; blocked: ['1-10 1 2007'] would disable January 1 through 10, 2007; while blocked: ['1,10 1 2007'] would disable January 1 and 10, 2007. In combination: blocked: ['1-10,20,22,24 1-3 *'] would disable 1 through 10, plus the 22nd and 24th of January through March for every (wildcard) year. There is an optional additional value which is day of the week (0 - 6 with 0 being Sunday). For example blocked: ['0 * 2007 0,6'] would disable all weekends (saturdays and sundays) in 2007. * classes - An array of 12 CSS classes that are applied to the calendar construct: calendar, prev, next, month, year, today, invalid, valid, inactive, active, hover, hilite. It is not necessary (as of RC3) to pass all 11 classes in the array: if you only wanted to change the 1st class you would set classes: ['alternate']; if you only wanted to change the 1st and 4th classes you would need to set classes: ['alternate', '', '', 'mes']. The first class, by default 'calendar', is applied to the div that contains the calendar element, the calendar button and the input or select it is appended to. The 'hilite' class (as of RC4) is applied to all days between 2 or more selected dates in multi-calendar functionality - see the demo for an example. * days - An array of the 7 names of the days of the week, starting with sunday. * direction - A positive or negative integer that determines the calendar's direction: n (a positive number) the calendar is future-only beginning at n days after today; -n (a negative number) the calendar is past-only ending at n days before today; 0 (zero) the calendar has no future or past restrictions (default). Note if you would like the calendar to be directional starting from today–as opposed to (1) tomorrow or (-1) yesterday–use a positive or negative fraction, such as direction: .5 (future-only, starting today). * draggable - A boolean value, true or false, to indicate if the calendar element will be draggable–useful in case the calendar obstructs (or is obstructed by) some other element on the page. Note, requires Mootools to be compiled with the Drag component. * months - An array of the 12 names of the month, starting with january. * navigation - An integer–0, 1 or 2–indicating which navigation method the class will use: traditional navigation (1) where left and right arrows allow the user to navigate by month (default); improved navigation (2) where the user can navigate by month or year; and static navigation (0) which is actually no navigation at all. * offset - An integer that indicates the first day of the week, with 0 being Sunday (default). * onHideStart, onHideComplete, onShowStart, onShowComplete - Event handlers that can be used to trigger your own scripts. * pad - An integer, the minimum number of days between calendars with multi-calendar functionality. For example: 1 (default) would enforce multiple calendars to space at least 1 day between picked dates; 7 would enforce a space of at least 1 week; while 0 (no padding) would allow multiple calendars to occupy the same date. * tweak - An object with { x: 0, y: 0} values that will "tweak" the calendar's placement on the page by x number of pixels horizontally and y number of pixels vertically. //参数说明 //日期格式字符(d, D, j, l, N, w, S, F, m, M, n, Y, y)分别对应(01, Mon, 01, Mon, 2, 2, st, 2月, 02, 2月, 02, 2010, 10) //blocked:禁止选择的日期。blocked: ['日 月 年 周(可选)'],blocked: ['3 * *']:表示禁止选择所有年份的所有月份的3号,blocked: ['1-10 3 2010']:表示禁止选择2010年3月1日到10日的日期,blocked: ['1,10 3 2010']:表示禁止选择2010年3月的1日和10日,blocked: ['1-10,20,22,24 1-3 *']:表示禁止所有所份的1到3月份的1到10日,20日,22日,24日的日期,blocked: ['0 * 2010 0,6']:表示禁止选择2010年所有月份的周六和周日 //classes:3种风格样式,calendar,dashboard,i-heart-ny,默认为calendar //days:定义星期显示的文字,默认为英文。days: ['日','一','二','三','四','五','六'] //direction:可选择日期的方向。0:表示不限制,负数:表示只可选当前日期的前负数值天的日期,正数表示只可选当前日期的前(正数值-1)天的日期 //draggable:是否可拖动,值为true和false,默认为true //months:定义月份显示的文字,默认为英文。months:['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'] //navigation:年月的导航。0:表示没有导航,1:有月导航按钮(默认值),2:有年月导航按钮 //offset:指示一周的第一天是星期几,默认为0,指星期天 //onHideStart, onHideComplete, onShowStart, onShowComplete:事件,可用于触发您自己的脚本处理程序 //pad:多日历显示,参考官网:http://www.electricprism.com/aeron/calendar/ //tweak:日历控件的相对座标
便民设施系统 <script src="http://ditu.google.com/maps?file=api&v=2& key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ- i1QfUnH94QxWIa6N4U6MouMmBA&h1=zh-CN" type="text/javascript"> //实现框选放大缩小功能 function DragZoomControl(opts_boxStyle, opts_other, opts_callbacks) { this.globals = { draggingOn: false, cornerTopDiv: null, cornerRightDiv: null, cornerBottomDiv: null, cornerLeftDiv: null, mapPosition: null, outlineDiv: null, mapWidth: 0, mapHeight: 0, mapRatio: 0, startX: 0, startY: 0, borderCorrection: 0 }; //设置边框的style this.globals.style = { opacity: .2, fillColor: "#000", border: "2px solid blue" }; var style = this.globals.style; for (var s in opts_boxStyle) { style[s]=opts_boxStyle[s]; } var borderStyleArray = style.border.split(' '); style.outlineWidth = parseInt(borderStyleArray[0].replace(/\D/g,'')); style.outlineColor = borderStyleArray[2]; style.alphaIE = 'alpha(opacity=' + (style.opacity * 100) + ')'; this.globals.backStack=[]; //其他选项 this.globals.options={ buttonHTML: 'zoom ...', buttonStartingStyle: {width: '52px', border: '1px solid black', padding: '2px'}, buttonStyle: {background: '#FFF'}, backButtonHTML: 'zoom back', backButtonStyle: {background: '#FFF', display: 'none'}, buttonZoomingHTML: 'Drag a region on the map', buttonZoomingStyle: {background: '#FF0'}, overlayRemoveTime: 6000, backButtonEnabled: false, stickyZoomEnabled: false, rightMouseZoomOutEnabled: false }; for (var s in opts_other) { this.globals.options[s] = opts_other[s] } //callbacks:buttonclick,dragstart,dragging,dragend,backbuttonclick if (opts_callbacks == null) { opts_callbacks = {} } this.globals.callbacks = opts_callbacks; } DragZoomControl.prototype = new GControl(); /** *方法 */ DragZoomControl.prototype.saveMapContext = function(text) { if (this.globals.options.backButtonEnabled) { this.saveBackContext_(text,true); this.globals.backButtonDiv.style.display = 'block'; } }; DragZoomControl.prototype.initiateZoom = function() {this.buttonclick_()}; DragZoomControl.prototype.initiateZoomBack = function() { if (this.globals.options.backButtonEnabled) this.backbuttonclick_()}; DragZoomControl.prototype.initButton_ = function(buttonContainerDiv) { var G = this.globals; var buttonDiv = document.createElement('div'); buttonDiv.innerHTML = G.options.buttonHTML; DragZoomUtil.style([buttonDiv], {cursor: 'pointer', zIndex:200}); DragZoomUtil.style([buttonDiv], G.options.buttonStartingStyle); DragZoomUtil.style([buttonDiv], G.options.buttonStyle); buttonContainerDiv.appendChild(buttonDiv); return buttonDiv; }; //初始化后退按钮 DragZoomControl.prototype.initBackButton_ = function(buttonContainerDiv) { var G = this.globals; var backButtonDiv = document.createElement('div'); backButtonDiv.innerHTML = G.options.backButtonHTML; DragZoomUtil.style([backButtonDiv], {cursor: 'pointer', zIndex:200}); DragZoomUtil.style([backButtonDiv], G.options.buttonStartingStyle); DragZoomUtil.style([backButtonDiv], G.options.backButtonStyle); buttonContainerDiv.appendChild(backButtonDiv); return backButtonDiv; }; //设置按钮模式 DragZoomControl.prototype.setButtonMode_ = function(mode){ var G = this.globals; if (mode == 'zooming') { G.buttonDiv.innerHTML = G.options.buttonZoomingHTML; DragZoomUtil.style([G.buttonDiv], G.options.buttonStartingStyle); DragZoomUtil.style([G.buttonDiv], G.options.buttonZoomingStyle); } else { G.buttonDiv.innerHTML = G.options.buttonHTML; DragZoomUtil.style([G.buttonDiv], G.options.buttonStartingStyle); DragZoomUtil.style([G.buttonDiv], G.options.buttonStyle); } }; //初始化控件 DragZoomControl.prototype.initialize = function(map) { var G = this.globals; var me = this; var mapDiv = map.getContainer(); // Create div for both buttons var buttonContainerDiv = document.createElement("div"); DragZoomUtil.style([buttonContainerDiv], {cursor: 'pointer', zIndex: 150}); // create and init the zoom button //DOM:button var buttonDiv = this.initButton_(buttonContainerDiv); // create and init the back button //DOM:button var backButtonDiv = this.initBackButton_(buttonContainerDiv); // Add the two buttons to the map mapDiv.appendChild(buttonContainerDiv); //DOM:map covers var zoomDiv = document.createElement("div"); var DIVS_TO_CREATE = ['outlineDiv', 'cornerTopDiv', 'cornerLeftDiv', 'cornerRightDiv', 'cornerBottomDiv']; for (var i=0; idisplay: 'none'}); zoomDiv.appendChild(div); G[id] = div; } DragZoomUtil.style([zoomDiv], {position: 'absolute', display: 'none', overflow: 'hidden', cursor: 'crosshair', zIndex: 101}); mapDiv.appendChild(zoomDiv); // add event listeners GEvent.addDomListener(buttonDiv, 'click', function(e) { me.buttonclick_(e); }); GEvent.addDomListener(backButtonDiv, 'click', function(e) { me.backbuttonclick_(e); }); GEvent.addDomListener(zoomDiv, 'mousedown', function(e) { me.coverMousedown_(e); }); GEvent.addDomListener(document, 'mousemove', function(e) { me.drag_(e); }); GEvent.addDomListener(document, 'mouseup', function(e) { me.mouseup_(e); }); // get globals G.mapPosition = DragZoomUtil.getElementPosition(mapDiv); G.buttonDiv = buttonDiv; G.backButtonDiv = backButtonDiv; G.mapCover = zoomDiv; G.map = map; G.borderCorrection = G.style.outlineWidth * 2; this.setDimensions_(); //styles this.initStyles_(); // disable text selection on map cover G.mapCover.onselectstart = function() {return false}; return buttonContainerDiv; }; DragZoomControl.prototype.getDefaultPosition = function() { return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(3, 120)); }; //鼠标按下事件 DragZoomControl.prototype.coverMousedown_ = function(e){ var G = this.globals; var pos = this.getRelPos_(e); G.startX = pos.left; G.startY = pos.top; if (e.which) { var rightMouse = (e.which != 1); } else if (e.button) { var rightMouse = (e.button != 1); } G.draggingRightMouse = rightMouse; DragZoomUtil.style([G.mapCover], {background: 'transparent', opacity: 1, filter: 'alpha(opacity=100)'}); DragZoomUtil.style([G.outlineDiv], {left: G.startX + 'px', top: G.startY + 'px', display: 'block', width: '1px', height: '1px'}); G.draggingOn = true; G.cornerTopDiv.style.top = (G.startY - G.mapHeight) + 'px'; G.cornerTopDiv.style.display ='block'; G.cornerLeftDiv.style.left = (G.startX - G.mapWidth) +'px'; G.cornerLeftDiv.style.top = G.startY + 'px'; G.cornerLeftDiv.style.display = 'block'; G.cornerRightDiv.style.left = G.startX + 'px'; G.cornerRightDiv.style.top = G.startY + 'px'; G.cornerRightDiv.style.display = 'block'; G.cornerBottomDiv.style.left = G.startX + 'px'; G.cornerBottomDiv.style.top = G.startY + 'px'; G.cornerBottomDiv.style.width = '0px'; G.cornerBottomDiv.style.display = 'block'; // invoke the callback if provided if (G.callbacks.dragstart != null) { G.callbacks.dragstart(G.startX, G.startY); } return false; }; //鼠标拖动事件 DragZoomControl.prototype.drag_ = function(e){ var G = this.globals; if(G.draggingOn) { var pos = this.getRelPos_(e); var rect = this.getRectangle_(G.startX, G.startY, pos, G.mapRatio); if (rect.left) { addX = -rect.width; } else { addX = 0; } if (rect.top) { addY = -rect.height; } else { addY = 0; } DragZoomUtil.style([G.outlineDiv], {left: G.startX + addX + 'px', top: G.startY + addY + 'px', display: 'block', width: '1px', height: '1px'}); G.outlineDiv.style.width = rect.width + "px"; G.outlineDiv.style.height = rect.height + "px"; G.cornerTopDiv.style.height = ((G.startY + addY) - (G.startY - G.mapHeight)) + 'px'; G.cornerLeftDiv.style.top = (G.startY + addY) + 'px'; G.cornerLeftDiv.style.width = ((G.startX + addX) - (G.startX - G.mapWidth)) + 'px'; G.cornerRightDiv.style.top = G.cornerLeftDiv.style.top; G.cornerRightDiv.style.left = (G.startX + addX + rect.width + G.borderCorrection) + 'px'; G.cornerBottomDiv.style.top = (G.startY + addY + rect.height + G.borderCorrection) + 'px'; G.cornerBottomDiv.style.left = (G.startX - G.mapWidth + ((G.startX + addX) - (G.startX - G.mapWidth))) + 'px'; G.cornerBottomDiv.style.width = (rect.width + G.borderCorrection) + 'px'; // invoke callback if provided if (G.callbacks.dragging != null) { G.callbacks.dragging(G.startX, G.startY, rect.endX, rect.endY) } return false; } }; //鼠标弹起事件 DragZoomControl.prototype.mouseup_ = function(e){ var G = this.globals; if (G.draggingOn) { var pos = this.getRelPos_(e); G.draggingOn = false; var rect = this.getRectangle_(G.startX, G.startY, pos, G.mapRatio); if (rect.left) rect.endX = rect.startX - rect.width; if (rect.top) rect.endY = rect.startY - rect.height; this.resetDragZoom_(); var nwpx = new GPoint(rect.startX, rect.startY); var nepx = new GPoint(rect.endX, rect.startY); var sepx = new GPoint(rect.endX, rect.endY); var swpx = new GPoint(rect.startX, rect.endY); var nw = G.map.fromContainerPixelToLatLng(nwpx); var ne = G.map.fromContainerPixelToLatLng(nepx); var se = G.map.fromContainerPixelToLatLng(sepx); var sw = G.map.fromContainerPixelToLatLng(swpx); var zoomAreaPoly = new GPolyline([nw, ne, se, sw, nw], G.style.outlineColor, G.style.outlineWidth + 1,.4); try{ G.map.addOverlay(zoomAreaPoly); setTimeout (function() {G.map.removeOverlay(zoomAreaPoly)}, G.options.overlayRemoveTime); }catch(e) {} var polyBounds = zoomAreaPoly.getBounds(); var ne = polyBounds.getNorthEast(); var sw = polyBounds.getSouthWest(); var se = new GLatLng(sw.lat(), ne.lng()); var nw = new GLatLng(ne.lat(), sw.lng()); if (G.options.rightMouseZoomOutEnabled && G.draggingRightMouse) { var mapSpan = G.map.getBounds().toSpan(); var polySpan = polyBounds.toSpan(); var dSize = Math.max(mapSpan.lat()/polySpan.lat(), mapSpan.lng()/polySpan.lng()); var zoomLevel = G.map.getZoom() - Math.ceil(Math.log(dSize, 2)); } else { var zoomLevel = G.map.getBoundsZoomLevel(polyBounds); } var center = polyBounds.getCenter(); G.map.setCenter(center, zoomLevel); // invoke callback if provided if (G.callbacks.dragend != null) { G.callbacks.dragend(nw, ne, se, sw, nwpx, nepx, sepx, swpx); } //re-init if sticky if (G.options.stickyZoomEnabled) { //GLog.write("stickyZoomEnabled, re-initting"); this.initCover_(); if (G.options.backButtonEnabled) this.saveBackContext_(G.options.backButtonHTML,false); // save the map context for back button G.backButtonDiv.style.display='none'; } } }; //保存缩放尺寸 DragZoomControl.prototype.setDimensions_ = function() { var G = this.globals; var mapSize = G.map.getSize(); G.mapWidth = mapSize.width; G.mapHeight = mapSize.height; G.mapRatio = G.mapHeight / G.mapWidth; // set left:0px in next
s in case we inherit text-align:center from map
in IE. DragZoomUtil.style([G.mapCover, G.cornerTopDiv, G.cornerRightDiv, G.cornerBottomDiv, G.cornerLeftDiv], {top: '0px', left: '0px', width: G.mapWidth + 'px', height: G.mapHeight +'px'}); }; //初始化style DragZoomControl.prototype.initStyles_ = function(){ var G = this.globals; DragZoomUtil.style([G.mapCover, G.cornerTopDiv, G.cornerRightDiv, G.cornerBottomDiv, G.cornerLeftDiv], {filter: G.style.alphaIE, opacity: G.style.opacity, background:G.style.fillColor}); G.outlineDiv.style.border = G.style.border; }; //框选button的click事件 DragZoomControl.prototype.buttonclick_ = function(){ var G = this.globals; G.backButtonDiv.style.display='none'; if (G.mapCover.style.display == 'block') { // reset if clicked before dragging this.resetDragZoom_(); if (G.options.backButtonEnabled) { this.restoreBackContext_(); // pop the backStack on a button reset if (G.backStack.length==0) G.backButtonDiv.style.display='none'; } } else { this.initCover_(); if ( G.options.backButtonEnabled ) this.saveBackContext_(G.options.backButtonHTML,false); // save the map context for back button } }; //后退按钮的click事件 DragZoomControl.prototype.backbuttonclick_ = function(){ var G = this.globals; if (G.options.backButtonEnabled && G.backStack.length > 0) { this.restoreBackContext_(); // invoke the callback if provided if (G.callbacks['backbuttonclick'] != null) { G.callbacks.backbuttonclick(G.methodCall); } } }; //后退保存功能 DragZoomControl.prototype.saveBackContext_ = function(text,methodCall) { var G = this.globals; var backFrame = {}; backFrame["center"] = G.map.getCenter(); backFrame["zoom"] = G.map.getZoom(); backFrame["maptype"] = G.map.getCurrentMapType(); backFrame["text"] = G.backButtonDiv.innerHTML; // this saves the previous button text backFrame["methodCall"] = methodCall; //This determines if it was an internal or method call G.backStack.push(backFrame); G.backButtonDiv.innerHTML = text; // Back Button is turned on in resetDragZoom_() }; //后退功能 DragZoomControl.prototype.restoreBackContext_ = function() { var G = this.globals; var backFrame = G.backStack.pop(); G.map.setCenter(backFrame["center"],backFrame["zoom"],backFrame["maptype"]); G.backButtonDiv.innerHTML = backFrame["text"]; G.methodCall = backFrame["methodCall"]; if (G.backStack.length==0) G.backButtonDiv.style.display = 'none'; // if we're at the top of the stack, hide the back botton }; //在地图上显示叠加层 DragZoomControl.prototype.initCover_ = function(){ var G = this.globals; G.mapPosition = DragZoomUtil.getElementPosition(G.map.getContainer()); this.setDimensions_(); this.setButtonMode_('zooming'); DragZoomUtil.style([G.mapCover], {display: 'block', background: G.style.fillColor}); DragZoomUtil.style([G.outlineDiv], {width: '0px', height: '0px'}); //invoke callback if provided if(G.callbacks['buttonclick'] != null){ G.callbacks.buttonclick(); } }; //获得鼠标的坐标 DragZoomControl.prototype.getRelPos_ = function(e) { var pos = DragZoomUtil.getMousePosition(e); var G = this.globals; return {top: (pos.top - G.mapPosition.top), left: (pos.left - G.mapPosition.left)}; }; //当用户拉框时求的矩形 DragZoomControl.prototype.getRectangle_=function(startX,startY,pos,ratio){ var left=false; var top=false; var dX=pos.left-startX; var dY=pos.top-startY; if(dX<0){ dX=dX*-1; top=true; } delta=dX>dY?dX:dY; return{ startX:startX, startY:startY, endX:startX+delta, endY:startY+parseInt(delta*ratio), width:delta, height:parseInt(delta*ratio), left:left, top:top } }; //重置Buttonde的CSS DragZoomControl.prototype.resetDragZoom_=function(){ var G=this.globals; DragZoomUtil.style([G.mapCover,G.cornerTopDiv,G.cornerRightDiv,G.cornerBottomDiv,G.cornerLeftDiv], {display:'none',opacity:G.style.opacity,fillter:G.style.alphaIE}); G.outlineDiv.style.display='none'; this.setButtonMode_('normal'); if(G.options.backButtonEnabled && (G.backStack.length>0))G.backButtonDiv.style.display='block'; }; var DragZoomUtil={}; //根据ID取得元素 DragZoomUtil.gE=function(sId){ return document.getElementById(sId); }; //取得DOM元素的绝对位置 DragZoomUtil.getMousePosition=function(e){ var posX=0; var posY=0; if(!e)var e=window.event; if(e.pageX||e.pageY){ posX=e.pageX; posY=e.pageY; }else if(e.clientX||e.clientY){ posX=e.clientX+(document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft); posY=e.clientY+(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop); } return {left:posX,top:posY}; }; //取得某一DOM元素的位置 DragZoomUtil.getElementPosition=function(element){ var leftPos=element.offsetLeft; var topPos=element.offsetTop; var parElement=element.offsetParent; while(parElement!=null){ leftPos+=parElement.offsetLeft; topPos+=parElement.offsetTop; parElement=parElement.offsetParent; } return{left:leftPos,top:topPos}; }; //将style应用于DOM元素 DragZoomUtil.style=function(elements,styles){ if(typeof(elements)=='string'){ eiements=DragZoomUtil.getManyElements(elements); } for(var i=0;iABLE_ADDRESS]="Unavailable Address"; status[G_GEO_BAD_KEY]="Bad Key"; status[G_GEO_TOO_MANY_QUERIES]="Too Many Queries"; status[G_GEO_SERVER_ERROR]="Server Error"; function showLocation(){ //清除marker map.clearOverlays(); document.getElementById('divOutput').innerHTML="搜索中..."; var address=document.getElementById('txtAddress').value; geocoder.getLocations(address,cb_showLocation); } function cb_showLocation(result){ //显示结果 if(result.Status.code==G_GEO_SUCCESS){ //成功表明 document.getElementById("divOutput").innerHTML="成功("+result.Placemark.length+")
"; for(var i=0;i"+point.toString()+"
"); //(address"
go
"); }//for }//if else{ document.getElementById("divOutput").innerHTML=result.Status.code; }//else } /** * 这个例子演示了 Google Map API 的以下功能: * * 可拖拽的标注 * * 在地图上覆盖折线 * * 计算地理距离 * * 事件处理(单击、拖拽) * * 消息提示窗口(气泡窗口) * * 利用链表维护各种对象 * * 自定义控件 * * 注意:为了在 IE6 中正常显示折线,必须在网页的 标签中加上: * * * @author haogang */ /** * 本示例用一个双向链表维护用户设定的标注,能够容易的实现标注的遍历和删除 * 每个链表结点 m 有如下字段: * m.prev 前驱标注 * m.next 后继标注 * m.segPrev 连接本标注与前驱标注的线段 * m.segNext 连接本标注与后继标注的线段 */ function GRulerControl() { var me = this; // 可国际化的字符串 me.RESET_BUTTON_TITLE_ = '清除所有测距标注'; me.ENABLE_BUTTON_TITLE_ = '添加测距标注已启用,单击这里禁用'; me.DISABLE_BUTTON_TITLE_ = '添加测距标注已禁用,单击这里启用'; me.DELETE_BUTTON_TITLE_ = '删除'; me.RESET_BUTTON_IMAGE_ = 'images/ruler_clear.png'; me.ENABLE_BUTTON_IMAGE_ = 'images/ruler_enabled.png'; me.DISABLE_BUTTON_IMAGE_ = 'images/ruler_disabled.png'; me.BACKGROUND_IMAGE_ = 'images/ruler_background.png' me.KILOMETER_ = '公里'; me.METER_ = '米'; } GRulerControl.prototype = new GControl(); /** * 初始化标尺控件 */ GRulerControl.prototype.initialize = function(map) { var me = this; var container = document.createElement('div'); /** *默认位置在右上角 */ GRulerControl.prototype.getDefaultPosition = function() { return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(8, 30)); } me.setButtonStyle_(container); // “启用/禁用”按钮 var btnEnable = document.createElement('img'); btnEnable.width = btnEnable.height = 20; GEvent.addDomListener(btnEnable, 'click', function() { me.setEnabled(!me.isEnabled()); } ); container.appendChild(btnEnable); // “重置”按钮 var btnReset = document.createElement('img'); btnReset.width = btnReset.height = 20; btnReset.src = me.RESET_BUTTON_IMAGE_; btnReset.title = me.RESET_BUTTON_TITLE_; GEvent.addDomListener(btnReset, 'click', function() { me.reset(); } ); container.appendChild(btnReset); // 距离标签 var txtInfo = document.createElement('div'); txtInfo.style.font = 'small Arial'; txtInfo.style.fontWeight = 'bold'; txtInfo.style.fontSize = '9pt'; txtInfo.style.width = "82px"; container.appendChild(txtInfo); // 初始化内部变量 map.rulerControl_ = me; me.map_ = map; me.head_ = new Object(); me.tail_ = new Object(); me.head_.next_ = me.tail_; me.tail_.prev_ = me.head_; me.btnEnable_ = btnEnable; me.btnReset_ = btnReset; me.txtInfo_ = txtInfo; me.setEnabled(true); map.getContainer().appendChild(container); return container; } /** * 设置控件的格式 */ GRulerControl.prototype.setButtonStyle_ = function(button) { button.style.backgroundImage = 'url(' + this.BACKGROUND_IMAGE_ + ')'; button.style.font = "small Arial"; button.style.border = "1px solid #888888"; button.style.padding = "4px"; button.style.textAlign = "right"; button.style.cursor = "pointer"; } /** * 用恰当的格式表示距离 */ GRulerControl.prototype.formatDistance_ = function(len) { var me = this; len = Math.round(len); if (len <= 1000) { return len + ' ' + me.METER_; } else if (len <= 1000000) { return len / 1000 + ' ' + me.KILOMETER_; } return Math.round(len / 1000) + ' ' + me.KILOMETER_; } /** * 格式化角度为字符串 */ GRulerControl.prototype.formatDegree_ = function(value) { value = Math.abs(value); var v1 = Math.floor(value); var v2 = Math.floor((value - v1) * 60); var v3 = Math.round((value - v1) * 3600 % 60); return v1 + '°' + v2 + '\'' + v3 + '"'; } /** * 格式化经纬度为字符串 */ GRulerControl.prototype.formatLatLng_ = function(pt) { var me = this; var latName, lngName; var lat = pt.lat(); var lng = pt.lng(); latName = lat >= 0 ? '北纬' : '南纬'; lngName = lng >= 0 ? '东经' : '西经'; return lngName + me.formatDegree_(lng) + ',' + latName + me.formatDegree_(lat); } /** * 返回控件的默认位置 */ GRulerControl.prototype.getDefaultPosition = function() { return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(8, 8)); } /** * 返回控件是否已启用 */ GRulerControl.prototype.isEnabled = function() { return this.enabled_; } /** * 设置控件的“启用/禁用"状态 */ GRulerControl.prototype.setEnabled = function(value) { var me = this; if (value == me.enabled_) return; me.enabled_ = value; if (me.enabled_) { me.mapClickHandle_ = GEvent.addListener(me.map_, 'click', me.onMapClick_); me.txtInfo_.style.display = 'block'; me.btnReset_.style.display = 'inline'; me.btnEnable_.src = me.ENABLE_BUTTON_IMAGE_; me.btnEnable_.title = me.ENABLE_BUTTON_TITLE_; me.updateDistance_(); } else { GEvent.removeListener(me.mapClickHandle_); me.txtInfo_.style.display = 'none'; me.btnReset_.style.display = 'none'; me.btnEnable_.src = me.DISABLE_BUTTON_IMAGE_; me.btnEnable_.title = me.DISABLE_BUTTON_TITLE_; } } /** * 事件处理函数:当用户单击地图时,要在该位置添加一个标注 */ GRulerControl.prototype.onMapClick_ = function(marker, point) { var me = this.rulerControl_; // 如果用户单击的是标注,不再这里处理 if (marker) return; // 创建标注,并添加到链表中 var newMarker = new GMarker(point, {draggable: true}); var pos = me.tail_.prev_; newMarker.prev_ = pos; newMarker.next_ = pos.next_; pos.next_.prev_ = newMarker; pos.next_ = newMarker; // 为标注添加事件处理函数:拖拽标注时要更新连接线段和距离 GEvent.addListener(newMarker, 'dragend', function() { me.map_.closeInfoWindow(); me.updateSegments_(newMarker); me.updateDistance_(); } ); // 为标注添加事件处理函数:单击标注时要显示气泡窗口 GEvent.addListener(newMarker, 'click', function() { newMarker.openInfoWindow(me.createInfoWindow_(newMarker)); } ); // 将创建的标注添加到地图中 me.map_.addOverlay(newMarker); if (newMarker.prev_ != me.head_) { // 如果这不是第一个标注,则创建连接到上一个标注的线段,并显示在地图中 var segment = [newMarker.prev_.getPoint(), point]; newMarker.segPrev_ = new GPolyline(segment); newMarker.prev_.segNext_ = newMarker.segPrev_; me.map_.addOverlay(newMarker.segPrev_); // 更新距离显示 me.updateDistance_(); } } /** * 统计总距离,并显示在网页中 */ GRulerControl.prototype.updateDistance_ = function() { var me = this; var len = me.getDistance(); // 结果显示在网页中 me.txtInfo_.innerHTML = me.formatDistance_(len); } /** * 遍历链表,统计总距离 */ GRulerControl.prototype.getDistance = function() { var me = this; var len = 0; // 周游链表,累计相邻两个标注间的距离 for (var m = me.head_; m != me.tail_; m = m.next_) { if (m.prev_ && m.prev_.getPoint) len += m.prev_.getPoint().distanceFrom(m.getPoint()); } return len; } /** * 清除所有标注,初始化链表 */ GRulerControl.prototype.reset = function() { var me = this; for (var m = me.head_.next_; m != me.tail_; m = m.next_) { me.map_.removeOverlay(m); if (m.segNext_) me.map_.removeOverlay(m.segNext_); } me.head_ = new Object(); me.tail_ = new Object(); me.head_.next_ = me.tail_; me.tail_.prev_ = me.head_; me.updateDistance_(); } /** * 事件处理函数:当用户拖拽标注、标注坐标改变时被调用,这里要更新与该标注连接的线段 * @param {GMarker} marker 被拖拽的标注 */ GRulerControl.prototype.updateSegments_ = function(marker) { var me = this; var segment; // 更新连接前驱的线段 if (marker.segPrev_ && marker.prev_.getPoint) { // 从地图上删除旧的线段 me.map_.removeOverlay(marker.segPrev_); // 根据标注的当前坐标构造新的线段,并更新链表结点的相关字段 segment = [marker.prev_.getPoint(), marker.getPoint()]; marker.segPrev_ = new GPolyline(segment); marker.prev_.segNext_ = marker.segPrev_; // 将新线段添加到地图中 me.map_.addOverlay(marker.segPrev_); } // 更新连接后继的线段,与上类似 if (marker.segNext_ && marker.next_.getPoint) { me.map_.removeOverlay(marker.segNext_); segment = [marker.getPoint(), marker.next_.getPoint()]; marker.segNext_ = new GPolyline(segment); marker.next_.segPrev_ = marker.segNext_; me.map_.addOverlay(marker.segNext_); } } /** * 为气泡提示窗口创建 DOM 对象,包括标注的坐标和“删除”按钮 * @param {GMarker} marker 对应的标注 */ GRulerControl.prototype.createInfoWindow_ = function(marker) { var me = this; // 为气泡提示窗口创建动态 DOM 对象,这里我们用 DIV 标签 var div = document.createElement('div'); div.style.fontSize = '10.5pt'; div.style.width = '250px'; div.appendChild( document.createTextNode(me.formatLatLng_(marker.getPoint()))); var hr = document.createElement('hr'); hr.style.border = 'solid 1px #cccccc'; div.appendChild(hr); // 创建“删除”按钮 var lnk = document.createElement('div'); lnk.innerHTML = me.DELETE_BUTTON_TITLE_; lnk.style.color = '#0000cc'; lnk.style.cursor = 'pointer'; lnk.style.textDecoration = 'underline'; // 为“删除”按钮添加事件处理:调用 removePoint() 并重新计算距离 lnk.onclick = function() { me.map_.closeInfoWindow(); me.removePoint_(marker); me.updateDistance_(); }; div.appendChild(lnk); // 当用户关闭气泡时 Google Map API 会自动释放该对象 return div; } /** * 事件处理函数:当用户选择删除标注时被调用,这里要删除与该标注连接的线段 * @param {GMarker} marker 要删除的标注 */ GRulerControl.prototype.removePoint_ = function(marker) { var me = this; // 先从地图上删除该标注 me.map_.removeOverlay(marker); // 对于中间结点,还要把它的前驱和后继用线段连接起来 if (marker.prev_.getPoint && marker.next_.getPoint) { var segment = [marker.prev_.getPoint(), marker.next_.getPoint()]; var polyline = new GPolyline(segment); marker.prev_.segNext_ = polyline; marker.next_.segPrev_ = polyline; me.map_.addOverlay(polyline); } marker.prev_.next_ = marker.next_; marker.next_.prev_ = marker.prev_; if (marker.segPrev_) me.map_.removeOverlay(marker.segPrev_); if (marker.segNext_) me.map_.removeOverlay(marker.segNext_); } function load(){ //检查浏览器的兼容性 if(GBrowserIsCompatible()){ //加载地图 map=new GMap2(document.getElementById("map_canvas")); //设置地图的中心坐标 var center=new GLatLng(24.49933,118.13800); map.setCenter(center,12); //设置地图的缩放工具 map.setUIToDefault(); //添加缩略图 map.addControl(new GOverviewMapControl()); //激活地图的双击放大功能和支持滑轮缩放 map.enableDoubleClickZoom(); map.enableScrollWheelZoom(); //给地图添加右键菜单 createContextMenu(map); //位于左上角 var topLeft=new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(0,0)); //添加地址导航控件 map.addControl(new GNavLabelControl(),topLeft); //添加自定义的控件 map.addControl(new GRulerControl()); //定义一个框选缩放控件样式 var styleOpts={}; //定义框选控件的参数 var otherOpts={}; //设置按钮的名称 otherOpts.buttonHTML='框选缩放'; //设置点击后的名称 otherOpts.buttonZoomingHTML='请在地图上拉一个框'; //支持连续框选缩放 otherOpts.stickyZoomEnabled=true; //设置拉框清除的时间间隔 otherOpts.overlayRemoveTime=60; //拉框时地图的透明度,取值从0~1 styleOpts.opacity=0; //支持右键啦框缩小地图 otherOpts.rightMouseZoomOutEnabled=true; var zcontrol=new DragZoomControl(styleOpts,otherOpts,{}); //位于左下角 var bottomLeft=new GControlPosition(G_ANCHOR_BOTTOM_LEFT,new GSize(0,0)); //添加自定义的控件 map.addControl(zcontrol,bottomLeft); //初始化GClientGeocoder对象 GoogleGeocoder=new GClientGeocoder(); var icon=new GIcon(); html='
这是什么
'; icon.image="http://labs.google.com/ridefinder/images/mm_20_red.png"; icon.iconSize=new GSize(21,29); var marker=createMarker(point,icon,html); var point=marker.getPoint(112.429714,39.934522); map.addOverlay(marker); geocoder=new GClientGeocoder(); var marker=new GMarker(center,{draggable:true}); map.addOverlay(marker); document.getElementById("lat").innerHTML=center.lat().toFixed(5); document.getElementById("lng").innerHTML=center.lng().toFixed(5); GEvent.addListener(marker,"dragend",function(){ var point=marker.getPoint(); map.panTo(point); document.getElementById("lat").innerHTML=point.lat().toFixed(5); document.getElementById("lng").innerHTML=point.lng().toFixed(5); }); GEvent.addListener(map,"moveend",function(){ map.clearOverlays(); var center=map.getCenter(); var marker=new GMarker(center,{draggable:true}); map.addOverlay(marker); document.getElementById("lat").innerHTML=center.lat().toFixed(5); document.getElementById("lng").innerHTML=center.lng().toFixed(5); GEvent.addListener(marker,"dragend",function(){ var point=marker.getPoint(); map.panTo(point); document.getElementById("lat").innerHTML=point.lat().toFixed(5); document.getElementById("lng").innerHTML=point.lng().toFixed(5); }); }); } else alert("error"); } //创建右键菜单,参数为地图对象,即为该地图添加右键菜单功能 function createContextMenu(map){ //右键菜单其实是一个DIV contextmenu=document.createElement("div"); //初始创建时右键菜单不可见 contextmenu.style.visibility="hidden"; //设置右键菜单的背景色及宽度 contextmenu.style.background="#ffffff"; contextmenu.style.border="1px solid #8888FF"; //获取地图对象的容器,并将菜单的DIV添加上去,但此时的菜单中不可见的 map.getContainer().appendChild(contextmenu); //为地图的右键添加事件侦听。当右键点击地图时,在地图右键点击的地方把菜单显示出来 GEvent.addListener(map,"singlerightclick",function(pixel,title){ //获取右键点击时的坐标位置(指像素) clickedPixel=pixel; var x=pixel.x; var y=pixel.y; //如果右键点击达到了屏幕的边界,调整菜单的位置 if(x>map.getSize().width-120) { x=map.getSize().width-120 } if(y>map.getSize().height-100) { y=map.getSize().height-100 } //实例化一个地图的位置控件 var pos=new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(x,y)); //把菜单DIV作为对象传递给地图位置控件 pos.apply(contextmenu); //把菜单设置为可见 contextmenu.style.visibility="visible"; }); //为地图添加click事件侦听器,当单击地图时,把菜单隐藏 GEvent.addListener(map,"click",function(){ contextmenu.style.visiblity="hidden"; }); } function createMarker(point,baseIcon,html){ var icon=new GIcon(baseIcon); var marker=new GMarker(point,icon); GEvent.addListener(marker,"click",function(){ marker.openInfoWindowHtml(html); }); return marker; } //初始化地图 window.onload=load; //卸载地图 window.onunload=GUnload; 厦门旅游服务系统
查询地址: able>

提示:单击您的当前位置和每个便民设施标注点通过测量距离选择您要的路线

able> able>
able>

用鼠标拖拉地图中心的红色气球标记就可以显示所在位置的经纬度坐标数据

纬度:

经度:

able>
able>

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧