Home > Community > Discussion Forums

LabWindows/CVI Idea Exchange

Showing results for 
Search instead for 
Do you mean 
The NI Idea Exchange is a product feedback forum where NI R&D and users work together to submit ideas, collaborate on their development, and vote for the ones they like best. View all of the NI Idea Exchanges to post an idea or add your opinion on an existing one today!
New Idea

The active configuration (Debug, Release, custom ones, ...) is shown in the bottom-right corner of the status bar (see attached config01.jpg).

I think that it would be better if this would be a menu ring that can be used to change the active configuration, without having to select Build >> Configuration >> xxxx (see config02.jpg)



SetAnnotationAttribute permits you to pass -1 in AnnotationIndex parameter to apply the attribute to all annotations on the graph, while SetCursorAttribute does not. It would be good that this command too permits someway to operate on all cursors in a single pass.


As an example, when I want to print a graph on a black-and-white printer I prepare the control for this changing all elements to black. 

I can use a single instruction for annotations:

   SetAnnotationAttribute (panelHandle, PANEL_GRAPH, -1, ATTR_ANNOTATION_CAPTION_COLOR, VAL_BLACK);


On the other hand, I need to iterate on all elements for cursors

   GetCtrlAttribute (panelHandle, PANEL_GRAPH, ATTR_NUM_CURSORS, &numCursors);
   for (k = 1; k <= numCursors; k++) SetCursorAttribute (panelHandle, PANEL_GRAPH, k, ATTR_CURSOR_COLOR, VAL_BLACK);


When using the UI functions, a neat feature is the ability to pull up a dialog of valid control IDs when specifying the control:




clicking the elipses displays this dialog showing all valid control IDs:




If you are using the function panel however, you cannot access this dialog and you are on your own for figuring out the correct control ID:




I think we should add this functionality in the function panel for any function that has a control ID parameter.




Make sure ALL the function panels use the right controls 

For example in the CVIDynamicMemoryInfo function panel below, the "Options" parameter should not use the String Ctrl.

Instead it would be "safer" to use a list box, a ring or whatever make sense to display the two available choices :  DYNAMIC_MEMORY_SHOW_ALLOCATED_MEMORY or DYNAMIC_MEMORY_SHOW_ALLOCATED_MEMORY_SUMMARY

This would help to reduce the typo errors etc.

Regards, 40tude



Status: New
by Active Participant gdargaud on ‎03-11-2014 07:55 AM

Coupled with the Source Code Browser, there should be a 'Refactor' option to rename an identifier to something else. And only that one, not the homonyms from other contexts, which is something impossible to achieve with a search and replace.

A new function purposal to improve ClientTCPRead

Status: New
by Active Participant ebalci on ‎03-05-2014 01:18 AM

As already mention in its help documentation, ClientTCPRead function may return without reading all data you want.

So an example code is provided so one can do the read operation as expected.


But I think this behaviour is not intuitive and I am sure many people (including me) have struggled to much before finding the cure.


I suggest to add a second function to the TCP library like ClientTCPReadExact which does this workaround for us and returns with all the data we have asked for.

There is an option to display the default display format for integers and floating point, but no such option to set the default format for
"String Display" or "Array display". Strangely, "Array display" shows my arrays as decimal numbers even though I have the default display format for integers set to Hex.

Ideally, I would like to be able to set them separately for char and unsigned char strings. For example:
                char strings I prefer to display as Ascii, null-terminated strings (the current default).
Unsigned char strings I prefer to display in Hexadecimal, with Options==Display Entire buffer. This is because my unsigned char strings are actually arrays of bytes.

I've been using CVI for a long time and it's frustrating to setup these options each and every time I look at one of my unsigned char strings. Even if it can't be setup separately for signed/unsigned  chars, I would like the option to set some sort of default.


Another aside, would it be possible to display the array/string as hex characters with the Ascii equivalent just below it? A dual display would be even nicer!

Better UI debugging: provide constant names

Status: New
by Trusted Enthusiast on ‎01-08-2013 02:39 AM



I don't know if it is possible technically but from a user's perspective it would be convenient for debugging a program (in debug configuration) if the UI constants could be provided in the data tooltips, too. Right now, if something is wrong with my UI I will have to do a lot of detective work to find out which control / control attribute is the problematic one...


Example: Consider the code


SetCtrlAttribute ( panel_handle, control_id, control_attribute, attribute_value );


Right now, if I hover over attribute_value, the tooltip will display something like "attribute_value = 24064". Then I will need to look up userint.h to find out which attribute value this is ( ATTR_CTRL_VAL ). It would be more convenient if the tooltip could include this information, too, and display something like "attribute_value = 24064 ( ATTR_CTRL_VAL )"


The same holds for control_id, because a number such as 14 will not immediately help me - I will have to go through the corresponding include file to find the respective UI control (e.g. TABPANEL_2_NUMERIC ).



I added the tab control into panel to my project. Overtime, I added 20 items into the single Tab Control. But since were so many items in the tab control, I decided to re-arrange items (indexes) in the tab control by either moving them left or right depending on the alphabetical order. But here is my problem.


Since I re-arranged the items (indexes), the indexes have all changed for all the items. Now I have to go everywhere the function GetPanelHandleFromTabPage is called and manually update the index numbers to match panel handles for the index. There are 20 different places where this could occur. The number of items (indexes) on the tab control could grow even more and may have to be re-arranged again in the future. Just a big pain.


Suggestion for improvement: Provide a another function that can obtain the index of the item on the tab control dynamically. This could be done by using the "Constant name:" issued in the edit tab panel of the edit tab control. So if the items (index) inside the tab control are re-arranged then the index value for that item is carried with the new index value.


Also the index would be included in the header file generated by the panel editor for CVI so that now the index value can be used thus eliminating the hard coded the index value.

It would be convienent at times to have a way to know if timer callbacks had been suspended by another part of the program by 

SuspendTimerCallbacks(), or if timers are running again from ResumeTimerCallbacks().  As far as I can tell there is currently no way to know this in CVI without manually keeping track of the last suspend/resume function called.  Thanks.

Decoration element

Status: New
by Trusted Enthusiast on ‎02-21-2011 02:31 AM



designing a screen layout I frequently encounter the wish to have not only rectangular (and circular) decoration elements, but also one of the type shown below.




Only the upper right rectangular shape can be realized now, while the more complex shape on the left is what I would like to see added in the future.

Instead of two parameters width and height four parameters would be required (two heights and two widths), may be even a fifth parameter specifying the orientation of the shape: as shown, mirrored in x, mirrored in y, mirrored in x and y.


Without doubt grouping control elements is useful; unfortunately these groups may differ in the number and type of control elements.


Thanks for consideration,



Request for ssh CVI library

Status: New
by Member bfarnham on ‎02-01-2011 11:50 AM

In previous applications, we would talk to our product using a telnet session.
CVI has libraries to do this, such as...


ConnectToTCPServer ((unsigned int *)&g_ShelfHandle[iSocketNumber], 23, sAddress, com_ClientTCPCB, NULL, 0);                                                                   

In one of our new products, it only supports "ssh" which is similar to telnet, but is a "secured shell" connection.
One option is to use putty:  http://digital.ni.com/public.nsf/allkb/C49602A79827DDBE86256CE9005757D5?OpenDocument




It is not the most straightforward way of doing things, but at the moment, it is what we have to deal with.

Since the ssh protocol is becoming the new standard in communications (used in all Linux machines, and windows), and most
of the new telnet programs (supporting ssh), I would like to request that a CVI library be created to support this protocol.








The additional columns of a tree can be hidden using SetTreeColumnAttribute() with ATTR_COLUMN_VISIBLE parameter. This is an easy and effective way.

For a table this attribute isn't supported, so you can use some workaround that requires more coding and have some disadvantages (for example if you set the width to the minimum value of 1, the user can increase it with the mouse...).

I think that the ATTR_COLUMN_VISIBLE parameter would solve this needs in the perfect way.

Status: Completed

Snippet manager

Status: Under Consideration
by Member Layosh on ‎01-26-2011 08:51 AM

We hear all the time that should write code that is reuseable. It is difficult to plan so far ahead, so I listen to the preachers but seldom follow them.

However, it is clearely easier to use snippets, code fragments, that I put together for something, even tested them and I remember that I have done that once, but finding it again is too much hassle, it is just 3 lines, 5 lines of code. It owuld be nice to be able to manage such snippets, copy them, tag them,or even share them; I recon, there are snippet libraries out there;,out of sight, out of reach;  but it would be really nice when the need arises, - you know that nagging dejavue feeling- than I could find them, bag them an use them... With time, even nice and practical libraries could grow out of them snippets... :-)


The FileSelectPopup dialog in LabWindows/CVI does not allow the programmer to set attributes for the dialog, such as sort order for files in the dialog. 


Similar functionality already exists for other functions in CVI, such as SetPrintAttribute to set attributes for a file to be printed. It'd be extremely convenient to have a SetFileSelectAttribute with options such as VAL_SORT. 


It shouldn't be necessary to set these attributes to use the FileSelectPopup dialog; their use would simply change the settings from their default values.




Daniel E.

Applications Engineer

National Instruments

Release source code to some UI controls

Status: New
by Member MarcelK on ‎11-19-2012 09:22 AM

The problem with the CVI standard controls is that once a feature is missing, it's VERY difficult to add for a normal user. What cruel hacks I had to implement to circumvent some limitation (like dynamically overlaying canvas controls over a scrollable table to simulate joined cells) is truly beyond description. Same with graphs controls (try implementing some with five distinct Y axes, fun for the whole family!). I always found you guys to be pretty responsive when it comes to feature requests, but some features are a) so application specific that I don't even dare requesting them and b) even if you'd agree to implement them, it takes about two to three years until they are released and the necessary runtime is deployed worldwide in my company.

So, please consider opening the source code of some of the more complex UI controls (like the table and graph controls), at the very least to some interested users like me (AFAIK my company even has a standing NDA agreement with NI). I already considered doing them from scratch, but then I noticed that I'd even have to re-invent the scroll bars that come with them! This was never a problem with any other platform I had used in the past (like Delphi), because they always came with full source code to the whole library.

I'd really appreciate a warning for "empty bodies" or whatever it is called, i.e. things like



 If written like

if(...) { };

 it is OK.


The  shortcut "Ctrl+Space" is for changing the input method in the some system.


Even we can change the shutcut, this function is so often to use.


The ideal is to make it like the way in some common source editor: when typing from any space position, the completion shows automatically.


This could be an option, to toggle on or off in  Edit>> Auto Completion menu item .

Menubar on pages of a tab control

Status: New
by Proven Zealot ‎01-21-2014 03:40 AM - edited ‎01-21-2014 03:41 AM

While it is possible to programmatically add a menubar to a tab page with LoadMenuBar, it is not possible to do that in the UIR editor.


Sometimes I use a tab control to display different scenarios to the user hiding tabs so that he's not aware of the pages not shown: this permits to have a single panel with all elements properly placed and designed on the different pages and programmatically choose which page to display depending on operating conditions or other characteristics. In such a case the tab page behaves like a "normal" panel, but while you can have a standard child panel with its own menubar, you cannot add one to a tab page other than programmatically.


It would be a handy to be able to add a menubar to tab pages too in the editor.

WYSIWYG UIR Editor (again)

Status: New
by Member CVI-User on ‎01-16-2014 01:26 AM

Please make the UIR editor WYSIWG again.

It's difficult to size and position controls if they get a (slightly) different size when the program is run because they use an other font than the editor.

See example here.


If you can't, at least make the editor use the same replacement as the runtime.

About LabWindows/CVI Idea Exchange

Do you have a feature idea for how to improve LabWindows/CVI? Submit and vote on ideas now!
  1. Browse by label or search in the LabWindows/CVI Idea Exchange to see if your idea has previously been submitted. If your idea exists, be sure to vote for the idea by giving it kudos to indicate your approval!
  2. If your idea has not been submitted click New Idea to submit a product idea. You should submit a separate post for each idea. Watch as the community gives your idea kudos and adds their input.
  3. Give kudos to other ideas that you would like to see implemented!
  4. NI R&D will review ideas that have been submitted and update the status.

Note: the LabWindows/CVI Idea Exchange is not the appropriate forum to submit technical support questions.

The LabWindows/CVI R&D team is committed to reviewing every idea submitted via the LabWindows/CVI Idea Exchange. However, we cannot guarantee the implementation of any LabWindows/CVI Idea Exchange submission.