Your csprogs.src should be something along the lines of:

csprogs.dat
system.qc
builtins.qc		(if not part of system.qc)
extensions.qc		(if not part of system.qc)
mitems.qc		(add this)
mitem_frame.qc		(add this)
mitem_desktop.qc	(add this)
mydefs.qc		(or your view.qc or whatever you called that)

In your equivelent of add:
	mitem_desktop thedesktop;
the desktop object is the 'root' menu object that contains all the child menus and stuff.

In CSQC_Init, add:
	thedesktop = spawn(mitem_desktop);
because that desktop object needs to be initialised somewhere.
You can create your own desktop instead if you wish, just inherit from my mitem_desktop class and provide your own rendering functions. See the comments inside the mitem_desktop class for help.

At the bottom of CSQC_UpdateView, add:
	items_draw(thedesktop);
the menu needs to be drawn too, woo. make sure that you draw it over the game/hud, of course.

At the top(ish) of CSQC_InputEvent, add:
	if (items_keypress(thedesktop, evtype, scanx, chary, devid))
		return TRUE;
gives input events to the menu code. Basically just passes the events through to the desktop object, which passes them down to whatever has input focus in the menu code.
Basically it becomes a trivial wrapper, just adding that extra desktop argument.

for menuqc, figure it out yourself. you can just call the functions with the menuqc stuff, but you'll need to integrate that with any existing code you have.

that's the infrastructure in place, now you need to actually create a menu somehow:
	local mitem_menu m = menu_spawn(thedesktop, "some menu", '320 200');
menu_spawn automatically adds the menu centered upon the specified desktop/parent.
the new menu will automatically receive events via the parent, etc. Its all automatic.
note that you should probably tie this to a console command or some such. you can put it at the end of CSQC_Init if you want, but be warned that that will get annoying.

you can then add a nice picture:
	menuitem_add(m, menuitempic_spawn ("gfx/qplaque.lmp", 	'32 144'), 	'16 4');
adds 'gfx/qplaque.lmp' (or a shader by that name) with size '32 144' at position '16 4' relative to the parent 'm'.
When the 'm' menu is closed, the children including this wigit will be removed too. If you want to override any properties, you'll need to split up the calls and use a local.
if you want to center items on the parent, you can use 'menuitem_addc' and change the 2d position vector into a single y value instead.

other wigit creation functions:
mitem_menu(mitem_desktop desktop, string mname, vector sz) menu_spawn; //NOTE: does its own menuitem_add.
mitem(vector sz) menuitemframe_spawn;		//container for other objects, generally inherited from rather than used on its own. automatically adds a scrollbar.
mitem(string text, string command, vector controls, vector sz) menuitemslider_spawn;	//cvar-attached slider. command is the cvar name. controls=[min, max, step]
mitem(string text, string command, vector sz) menuitemeditt_spawn;	//cvar-attached text editor. command is the cvar to edit.
mitem(string text, string command, vector sz) menuitemcheck_spawn;	//cvar-attached checkbox. command is the cvar to edit. The cvar will be set to "0" or "1" as required.
mitem(string text, string command, vector sz) menuitembind_spawn;	//provides a key-binding control. command is the 'console' command to be added to be bound. the wigit will listen for scancodes on its own.
mitem(string text, string command, vector sz) menuitembutton_spawn;	//button with lame 3d border. command will be localcmded when clicked.
mitem(string text, string command, float height) menuitemtext_spawn;	//simple text. command will be localcmded when clicked, leave it empty if you want simple text.
mitem(string imagename, vector sz) menuitempic_spawn;			//simple image. woo.
mitem(vector sz, vector rgb, float alph) menuitemfill_spawn;		//block colour. hurrah.
