A Functional Specification answers the question "What does my program do?". In the case of a GUI program, it's more like "What does my program do when the user does <action>?".
Depending on how detailed you want to get, generally you will create the functional spec based on Use Cases. So, for example, your use case is "User enters Customer Data". Functional spec says "User clicks on menu option for 'Customer Data'. Display Customer Data Dialog. Customer Data Dialog contains text boxes Name, Address, City, State, Zip. Customer Data Dialog contains buttons 'OK' and 'Cancel'. When user clicks 'OK' button, program checks that all text boxes have data entered. If yes, continue. If no, hoist message box." Et cetera, et cetera. Think of a functional spec as a narrative of the user experience.
If you are documenting after the fact, it is very helpful. If you are creating it prior to development as a guide to your coders, it may not be available. Sometimes just a mockup will do, from Visio or VB or any good WYSIWYG resource editor package.